问题:将Django表单字段更改为隐藏字段
我有一个带的Django表单,与RegexField
正常的文本输入字段非常相似。
我认为,在某些情况下,我想对用户隐藏它,并尝试使表单尽可能相似。将这个领域变成一个HiddenInput
领域的最好方法是什么?
我知道我可以使用以下方法在字段上设置属性:
form['fieldname'].field.widget.attr['readonly'] = 'readonly'
我可以通过以下方式设置所需的初始值:
form.initial['fieldname'] = 'mydesiredvalue'
但是,这不会更改小部件的形式。
什么是使此字段成为<input type="hidden">
字段的最佳/最“ django-y” /最不“ hacky”的方法?
回答 0
如果您具有自定义模板并查看,则可以排除该字段并用于{{ modelform.instance.field }}
获取值。
您也可以在视图中使用:
form.fields['field_name'].widget = forms.HiddenInput()
但我不确定它是否会保护发布后的保存方法。
希望能帮助到你。
回答 1
这也可能有用: {{ form.field.as_hidden }}
回答 2
一个对我有用的选项,将字段的原始形式定义为:
forms.CharField(widget = forms.HiddenInput(), required = False)
那么当您在新的类中覆盖它时,它将保留它的位置。
回答 3
首先,如果您不希望用户修改数据,则仅排除该字段似乎更干净。将其包含为隐藏字段只会增加更多数据以通过有线方式发送,并在您不希望恶意用户修改时邀请它们进行修改。如果确实有理由包括该字段但将其隐藏,则可以将关键字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)
在视图中,我更喜欢这种方法来修改模型形式的内部,但这只是一个问题。
回答 4
对于正常形式,您可以
class MyModelForm(forms.ModelForm):
slug = forms.CharField(widget=forms.HiddenInput())
如果您有模型表格,则可以执行以下操作
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()
回答 5
如果要始终隐藏该字段,请使用以下命令:
class MyForm(forms.Form):
hidden_input = forms.CharField(widget=forms.HiddenInput(), initial="value")
回答 6
您可以只使用css:
#id_fieldname, label[for="id_fieldname"] {
position: absolute;
display: none
}
这将使该字段及其标签不可见。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。