django:从另一个表中将表单字段添加到生成的表单中

时间:2012-04-15 18:56:14

标签: python django forms django-forms

我有这个表产品:
大小
颜色

和另一张表图片:
PRODUCT_ID
图片

我已从Products表生成表单,但我还需要在该字段中为该产品添加图片。是否可以在图片的产品生成表单中添加字段?

提前致谢。

2 个答案:

答案 0 :(得分:3)

您可以使用prefix参数在同一<form>代码中添加多个表单。

从图片模型表单中排除产品字段。在视图中,检查两个表单是否有效。如果两个表单都有效,请保存两个表单,但使用commit=False作为图片表单,以便您可以手动设置产品。

将所有内容放在一起,您的表单和视图应如下所示:

class ProductForm(forms.ModelForm):
    class Meta:
        model = Product

class PictureForm(forms.ModelForm):
    class Meta:
        model = Picture
        exclude = ('product',)

def my_view(request):
    if request.method == "POST":
        product_form = ProductForm(prefix="product", data=request.POST)
        picture_form = PictureForm(prefix="picture", data=request.POST, files=request.FILES)
        if product_form.is_valid() and picture_form.is_valid():
            product = product_form.save()
            picture = picture_form.save(commit=False)
            picture.product=product
            picture.save()
            return HttpResponseRedirect("/success_url/")
    else:
        product_form = ProductForm(prefix="product")
        picture_form = PictureForm(prefix="picture")
    return render(request, "my_template.html", {'product_form':product_form, 
                                   'picture_form': picture_form,
                                   })

您的模板应如下所示:

<form>
  <table>
    <tbody>
      {{ product_form }}
      {{ picture_form }}
    </tbody>
  </table>
  <p><input type="submit" value="Submit" /></p>
</form>

答案 1 :(得分:0)

简短的回答是肯定的。您必须小心模板和视图。

请您分享您的代码...查看,django模型和模板。你在使用模型表吗?为什么要将它们作为单独的模型(表格)保存?

我的建议是,如果您不需要将模型分开,请编辑产品型号以包含图片。那么你的表格很适合你的需求。

希望这会有所帮助。如果没有,请共享代码。