将django表单字段更改为隐藏字段
我有一个Django的forms与RegexField
(这是非常类似于正常的文本input字段)。 在我看来,在某些情况下我想把这个隐藏起来,尽量保持表格尽可能的相似。
把这个字段变成HiddenInput
字段的最好方法是什么? 我知道我可以使用form['fieldname'].field.widget.attr['readonly'] = 'readonly'
设置字段的属性form['fieldname'].field.widget.attr['readonly'] = 'readonly'
,我可以用form.initial['fieldname'] = 'mydesiredvalue'
。 但是,这不会改变小部件的forms。
什么是最好的/最django-y /至lesshacky的方式来使这个领域的<input type="hidden"
字段?
如果您有自定义模板和视图,则可以排除该字段并使用{{ modelform.instance.field }}
来获取该值。
你也可能更喜欢在视图中使用:
form.fields['field_name'].widget = forms.HiddenInput()
但是我不确定它会保护后期保存方法。
希望能帮助到你。
它也可以是有用的: {{ form.field.as_hidden }}
首先,如果您不希望用户修改数据,那么简单地排除该字段似乎更清晰。 将它作为隐藏字段添加只是增加了更多的数据通过networking发送,并邀请恶意用户修改它,当你不希望他们。 如果您确实有足够的理由来包含该字段但将其隐藏,则可以将关键字arg传递给模型的构造函数。 也许这样的东西:
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)
我更喜欢这种方法来修改视图中的模型的内部,但这是一个品味的问题。
一个选项,为我工作,定义在原始forms的字段为:
forms.CharField(widget = forms.HiddenInput(), required = False)
那么当你在新的类中覆盖它时,它将保持它的位置。
对于正常forms,你可以做
class MyModelForm(forms.ModelForm): slug = forms.CharField(widget=forms.HiddenInput())
如果你模型的forms,你可以做到以下几点
class MyModelForm(forms.ModelForm): class Meta: model = TagStatus fields = ('slug', 'ext') widgets = {'slug': forms.HiddenInput()}
您也可以重写__init__
方法
class Myform(forms.Form): def __init__(self, *args, **kwargs): super(Myform, self).__init__(*args, **kwargs) self.fields['slug'].widget = forms.HiddenInput()