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() не делает то, что должен, и чего не хватает для правильного сохранения данных?
Заранее спасибо!