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
谢谢,这就是我需要的!:)谢谢你的回答。首先我在产品表中有一张图片,但后来我意识到我需要不止一张图片才能买到一个产品,所以我为图片制作了一个特殊的表格。阿拉斯代尔的代码完成了任务。