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

Python django:将表单字段添加到从另一个表生成的表单中,python,django,forms,django-forms,Python,Django,Forms,Django Forms,我有以下产品: 大小 颜色 etc 另一张桌子图片: 产品标识 图片 我已经从Products表中生成了表单,但我还需要那个字段来向该产品添加图片。是否可以为图片向产品生成表单添加字段 提前谢谢。简短的回答是肯定的。您必须小心使用模板和视图 你能分享你的代码吗。。。视图、django模型和模板。你在使用模型表格吗?为什么要将它们作为单独的模型(表)保存 我的建议是,如果不需要将模型分开,请编辑产品模型以包含图片。然后你的表格会很好地满足你的需要 希望这有帮助。如果没有,请共享代码。通过使用参数

我有以下产品:
大小
颜色
etc

另一张桌子图片:
产品标识
图片

我已经从Products表中生成了表单,但我还需要那个字段来向该产品添加图片。是否可以为图片向产品生成表单添加字段


提前谢谢。

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

你能分享你的代码吗。。。视图、django模型和模板。你在使用模型表格吗?为什么要将它们作为单独的模型(表)保存

我的建议是,如果不需要将模型分开,请编辑产品模型以包含图片。然后你的表格会很好地满足你的需要


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

通过使用参数,可以在同一个
标记中包含多个表单

从图片模型表单中排除产品字段。在视图中,检查两个表单是否有效。如果两个表单都有效,则保存两个表单,但对图片表单使用
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>
您的模板应如下所示:

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>

{{乘积形式}
{{图片形式}


nitpick:
render()
的第一个参数是
request
谢谢,这就是我需要的!:)谢谢你的回答。首先我在产品表中有一张图片,但后来我意识到我需要不止一张图片才能买到一个产品,所以我为图片制作了一个特殊的表格。阿拉斯代尔的代码完成了任务。