Django内联formset:内联外键与父实例主键不匹配

时间:2014-09-21 04:34:10

标签: django django-forms formset inline-formset

关于这个话题似乎有很多问题,但我还没有找到任何能够解决这个问题的方法。我正在尝试创建一个视图来创建Recipe对象,该对象具有IngredientInstruction s的外键集。当我尝试提交时,表单集会给我错误'recipe': [u'The inline foreign key did not match the parent instance primary key.']。以下是我的完整观点:

def recipe_add(request):
    profile = profile_from_request(request)

    if request.method == 'POST':
        recipe_form = RecipeForm(request.POST)
        if recipe_form.is_valid():
            recipe = recipe_form.save(commit=False)
            recipe.user = profile_from_request(request)
            ingredient_form = IngredientFormSet(request.POST, prefix='ingredient', instance=recipe)
            instruction_form = InstructionFormSet(request.POST, prefix='instruction', instance=recipe)
            if ingredient_form.is_valid() and instruction_form.is_valid():
                recipe = recipe.save()
                ingredient_form.save()
                instruction_form.save()
                messages.success(request, _("Recipe added."))
                return HttpResponseRedirect(reverse("recipes:recipe_list"))
    else:  # GET
        recipe_form = RecipeForm()
        ingredient_form = IngredientFormSet(prefix='ingredient', instance=Recipe())
        instruction_form = InstructionFormSet(prefix='instruction', instance=Recipe())

    return render(
        request, 'recipes/recipe_add.html',
        {
            'profile': profile,
            'recipe_form': recipe_form,
            'ingredient_form': ingredient_form,
            'instruction_form': instruction_form,
        }
    )

我不确定问题是否来自于GETPOST方法中创建表单集。我曾尝试在两者中弄乱instance论点但是没有任何工作可做。

1 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,因为我忘了在模板中添加我的formset的管理表单。

在模板中,您必须拥有以下内容:

{{ ingredient.management_form }}

{{ instruction.management_form }}

快速验证方法是在浏览器中检查您的表单代码,并查找此管理表单所呈现的隐藏字段。

然后,您可以查看这些表单集的外键值是否与可能指向正确方向的配方主键匹配。