将Django表单字段更改为隐藏字段
我有一个Django表单,其中有一个RegexField
,这个字段看起来和普通的文本输入框很像。
在我的视图中,根据某些条件,我想把这个字段隐藏起来,同时尽量保持表单的其他部分不变。有什么好的方法可以把这个字段变成一个HiddenInput
字段呢?
我知道可以通过以下方式设置字段的属性:
form['fieldname'].field.widget.attr['readonly'] = 'readonly'
而且我可以通过以下方式设置想要的初始值:
form.initial['fieldname'] = 'mydesiredvalue'
不过,这样做并不会改变输入框的形式。
那么,最好的、最符合Django风格的、又不算“黑科技”的方法是什么,让这个字段变成一个<input type="hidden">
的字段呢?
12 个回答
91
对我有效的一个方法是,在原始表单中定义这个字段如下:
forms.CharField(widget = forms.HiddenInput(), required = False)
然后当你在新类中重写它时,它的位置会保持不变。
272
这可能也很有用:{{ form.field.as_hidden }}
223
如果你有一个自定义的模板和视图,你可以选择不显示某个字段,然后用 {{ modelform.instance.field }}
来获取这个字段的值。
另外,你也可以在视图中使用:
field = form.fields['field_name']
field.widget = field.hidden_widget()
不过我不太确定这样做是否能保护在提交时的保存方法。
补充一下:对于有多个值的字段,不能使用 HiddenInput 作为输入类型,所以要用这个字段的默认隐藏输入组件。