【问题标题】:django: add form field to generated form from another tabledjango:将表单字段添加到从另一个表生成的表单
【发布时间】:2012-04-27 05:55:42
【问题描述】:

我有这张桌子产品:
尺寸
颜色
等等

和另一张桌子图片:
产品编号
图片

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

提前致谢。

【问题讨论】:

    标签: python django forms django-forms


    【解决方案1】:

    您可以使用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>
    

    【讨论】:

    • nitpick:render()的第一个参数是request
    • 谢谢,这正是我所需要的! :)
    【解决方案2】:

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

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

    我的建议是,如果您不需要将模型分开,请编辑 Product 模型以包含图片。那么您的表单将很好地满足您的需求。

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

    【讨论】:

    • 感谢您的回答。首先我在产品表中有图片,但后来我意识到我需要不止一张图片到一个产品,所以我为图片制作了特殊的表。来自 Alasdair 的代码完成了这项工作。
    猜你喜欢
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 2015-06-25
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 2011-08-30
    相关资源
    最近更新 更多