Django JSON не сохраняется в базе данных sqlite, просто выдается ошибка и база данных остается пустой

Я пытаюсь сохранить данные JSON в базу данных sqlite на Django

У меня есть небольшие фрагменты кода, которые вызывают некоторые проблемы.

Вот фрагмент моего models.py файла

class Recipes(models.Model):
    name = models.CharField(max_length=120, default='')
    pub_date = models.DateTimeField('date published')
    style = models.CharField(max_length=200, default='')
    brewer = models.CharField(max_length=100, default='')
    type = models.CharField(max_length=20, default='All Grain')
    version = models.CharField(max_length=20, default='1')
    batch_size = models.DecimalField(decimal_places=2, max_digits=8, default=0.0)
    boil_size = models.DecimalField(decimal_places=2, max_digits=8, default=0.0)
    boil_time = models.DecimalField(decimal_places=1, max_digits=4, default=0.0)
    efficiency = models.DecimalField(decimal_places=1, max_digits=4, default=75.0)
    ibu = models.DecimalField(decimal_places=1, max_digits=4, default=0.0)
    abv = models.DecimalField(decimal_places=2, max_digits=4, default=0.0)
    notes = models.TextField(default='')
    carbonation = models.DecimalField(decimal_places=2, max_digits=4, default=0.0)
    primary_age = models.DecimalField(decimal_places=1, max_digits=4, default = 0)
    secondary_age = models.DecimalField(decimal_places=1, max_digits=4, default = 0)
    age = models.DecimalField(decimal_places=1, max_digits=4, default = 0)
    __fermentables = []
  
    @classmethod
    def create(cls,attr):
        recipe = cls()
        # do something with the book
        for k in Recipes._meta.fields:
            if  k.name in attr:
                setattr(recipe,k.name,attr[k.name])
        return recipe

Вот часть views.py, которая вызывает у меня затруднения

def saveRecipe(request):
        try:
            data=json.loads(request.read())
            print("printing values")
            print(data["name"])  #prints here works
            recipe = Recipes.create(attr=data)
            recipe.name = data["name"]
            recipe.save()
            recipe.addYeast(items=data["yeast"])
            recipe.addFermentables(items=data["fermentables"])
            recipe.addHops(items=data["hops"])
            recipe.addMashStep(items=data["mash"])
            return  HttpResponse(serialize('json', [recipe]),  content_type='application/json')
        except:
           
            return HttpResponse("error")

В основном у меня есть кнопка, которая анализирует JSON из заполненных форм, и когда я печатаю имя print(data["name"]), оно кажется правильно разобранным.

Теперь в целях тестирования я поместил recipe.save() в ту часть файла views, где вы можете видеть, и я думаю, что технически это должно сохранить разобранную информацию в базу данных, но когда я проверяю базу данных, там ничего нет.

Я попробовал сделать это без блока try/except, но тогда я получаю эту ошибку:

Internal Server Error: /save-recipe
Traceback (most recent call last):
  File "C:\Users\Admin\AppData\Roaming\Python\Python310\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "C:\Users\Admin\AppData\Roaming\Python\Python310\site-packages\django\core\handlers\base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\Admin\Desktop\praktika\brew\brewery\views.py", line 106, in saveRecipe
    recipe = Recipes.create(attr=data)
  File "C:\Users\Admin\Desktop\praktika\brew\brewery\models.py", line 73, in create
    print(name, style)
NameError: name 'name' is not defined
[26/Mar/2022 19:30:21] "POST /save-recipe HTTP/1.1" 500 67750

Упомянутая в ошибке строка 73 файла models.py на самом деле является строкой return recipe из метода create класса Recipe

По сути, мой вопрос заключается в том, почему recipe.save() не делает то, что должен, и чего не хватает для правильного сохранения данных?

Заранее спасибо!

Вернуться на верх