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/

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