问题描述
我有一个带有 RegexField
(与普通文本输入字段非常相似) 的 django 表单。在我看来,在某些情况下,我想把它从用户隐藏起来,并尽量保持形式尽可能相似。
将该字段转换为 HiddenInput
字段的最佳方式是什么?我知道我可以使用 form['fieldname'].field.widget.attr['readonly'] = 'readonly'
在字段上设置属性,并且可以使用 form.initial['fieldname'] = 'mydesiredvalue'
设置所需的初始值。但是,这不会改变窗口小工具的形式。
什么是最好的/大多数 django-y /最简便的方式使这个领域成为一个<input type="hidden"
领域?
最佳解决方案
如果您有自定义模板和视图,则可以排除该字段并使用 {{ modelform.instance.field }}
获取该值。
您也可以更喜欢在视图中使用:
form.fields['field_name'].widget = forms.HiddenInput()
但我不知道它会保护邮件的保存方法。
希望它有帮助。
次佳解决方案
它也可以是有用的:{{ form.field.as_hidden }}
第三种解决方案
首先,如果您不希望用户修改数据,那么简单地排除该字段似乎更为简洁。将其作为隐藏字段,只需添加更多数据通过电子邮件发送,并在不想要的时候邀请恶意用户进行修改。如果你有一个很好的理由来包含该字段但是隐藏它,你可以将一个关键字 arg 传递给 modelform 的构造函数。可能这样的事情
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
def __init__(self, *args, **kwargs):
from django.forms.widgets import HiddenInput
hide_condition = kwargs.pop('hide_condition',None)
super(MyModelForm, self).__init__(*args, **kwargs)
if hide_condition:
self.fields['fieldname'].widget = HiddenInput()
# or alternately: del self.fields['fieldname'] to remove it from the form altogether.
然后在你的看法:
form = MyModelForm(hide_condition=True)
我更喜欢这种在视图中修改 modelform 内部的方法,但这是一个口味问题。
第四种方案
一个对我有用的选项,将原始形式的字段定义为:
forms.CharField(widget = forms.HiddenInput(), required = False)
那么当你在新的类中覆盖它时,它将保持它的位置。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。