将Django表单字段更改为隐藏字段

181 投票
12 回答
272009 浏览
提问于 2025-04-16 22:27

我有一个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 作为输入类型,所以要用这个字段的默认隐藏输入组件。

撰写回答