Python Django как сохранить отношения многие к одному JSON данные в sqlite
Мне интересно, как я должен сохранять элементы данных в таблицах, которые имеют отношения "многие к одному" с моделью
Вот код, который я получил на данный момент:
models.py:
views.py:
def recipes(request):
recipes = Recipes.objects.all()
recipeFermentableFormset = formset_factory(RecipeFermentableForm, extra=1)
recipeHopFormset = formset_factory(RecipeHopForm, extra=1)
RecipeMiscFormSet= formset_factory(RecipeMiscForm, extra=1)
RecipeYeastFormSet = formset_factory(RecipeYeastForm,extra=1)
RecipeMashFormSet = formset_factory(RecipeMashForm,extra=1)
return render(request, 'recipes.html', {'recipes':recipes,"recipe_form" :RecipeForm(auto_id="recipe_%s"),
"recipe_fermentableformset":recipeFermentableFormset(prefix='fermentable'),
"recipe_hopformset":recipeHopFormset(prefix='hop'),
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.addFermentables(items=data["fermentables"])
recipe.addHops(items=data["hops"])
return HttpResponse(serialize('json', [recipe]), content_type='application/json')
except:
return HttpResponse("error")
По сути, когда пользователь заполняет форму и нажимает на кнопку сохранения, вызывается функция saveRecipe. В функции есть recipe.save(), которая сохраняет в базу данных таблицу Рецепты.
Однако я хочу также сохранить RecipeFermentable и RecipeHops, которые имеют отношения "многие к одному" с моделью Recipes, в их конкретные таблицы в базе данных sqlite.
И я понятия не имею, как это сделать.
Может кто-нибудь помочь мне, подсказав, правилен ли код, который у меня есть на данный момент, и как я должен продолжить сохранение других данных?
Заранее спасибо!!!
Если вы хотите установить связь между вновь добавленной строкой модели "Recipe" с существующими строками "RecipeFermentable" и "RecipeHops", попробуйте использовать следующий подход в вашей функции представления.
recipe_fermentable_obj = RecipeFermentable.objects.get(id="identifier")
recipe_hops_obj = RecipeHops.objects.get(id="identifier")
# after saving recipe into "Recipe" model.
recipe.recipefermentable_set.add(recipe_fermentable_obj)
recipe.recipehops_set.add(recipe_hops_obj)
recipe.save() # calling again
Если вы хотите создать новые строки в "RecipeFermentable" и "RecipeHops" при создании новой строки в модели "Recipe", попробуйте следующий подход.
# create recipe object and save()
recipe_obj.save()
# create recipe_fermentable object with recipe obj for foreign key field.
RecipeFermentable.objects.create(recipe=recipe_obj, .....)
RecipeHops.objects.create(recipe=recipe_obj, .....)
Ссылка: https://docs.djangoproject.com/en/4.0/topics/db/examples/many_to_one/