django.forms - 让formset_factory通过POST

时间:2018-05-11 13:32:28

标签: django django-forms

我正在使用formset_factory生成一堆表单,但我也希望使用这些表单显示一些HTML,这些HTML特定于最终会保存的对象。说:

Name: Chris
Color: Blue
Shoesize: [user input]

Name: Bologna
Color: Pink
Shoesize: [user input]

其中NameColor以HTML格式显示,Shoesize是某种字段。我尝试添加带有初始值的隐藏字段(使用formset_factory参数创建initial时初始化),但是当尝试POST这些表单时,如果他们没有&#39 ; t通过验证,初始值消失,隐藏字段为空(其中一些是必需的)。

我可以在字典中包含不仅仅包含发送到我的模板的字体集,但我没有办法将表格中的每个表单与信息相关联(除非通过表单中的属性,在POST期间没有通过)。我已尝试使用"禁用"的实际表单字段属性,但也没有通过验证发送。

我是否可以覆盖__init__方法以包含一些变量(但那么如何将这些变量传递给formset_factory?)

有没有办法做到这一点,或者最好不要使用formset_factory而是构建我自己的表格字典(我不喜欢弄乱prefix; formset_factory为每个表单字段生成编号ID和类似的东西做得非常好。

修改:这不是模型表单。这是一种常规形式。

1 个答案:

答案 0 :(得分:1)

您可以动态设置初始值,将其设置为已禁用,只显示其值。

class SizeForm(forms.Form):
    name = forms.CharField(disabled=True)
    size = forms.CharField()

    def __init__(*args, **kwargs):
        name_default = kwargs.pop('name_default', None)
        super(form, self).__init__(*args, **kwargs)
        if name_default:
            self.fields['name'].initial = name_default

<form>
    Name: {{ form.name.value }}
    Size: {{ form.size }}
</form>

然后,当您在视图中调用表单时,您将向其传递name_default关键字参数。