Ror*_*ory 117 html python django django-forms
我有一个带有a的django表单RegexField(与普通的文本输入字段非常相似).在我看来,在某些情况下,我想将其隐藏在用户之外,并尽量保持表单尽可能相似.
将这个领域变成一个HiddenInput领域的最佳方法是什么?我知道我可以在字段上设置属性<input type="hidden">,我可以设置所需的初始值RegexField.但是,这不会改变小部件的形式.
什么是使这个领域成为一个HiddenInput领域的最佳/最django-y /最少hacky方式?
chr*_*e31 156
如果您有自定义模板和视图,则可以排除该字段并使用它{{ modelform.instance.field }}来获取值.
您也可以在视图中使用:
form.fields['field_name'].widget = forms.HiddenInput()
Run Code Online (Sandbox Code Playgroud)
但我不确定它会保护帖子上的保存方法.
希望能帮助到你.
Sha*_*bak 51
一个适合我的选项,将原始形式的字段定义为:
forms.CharField(widget = forms.HiddenInput(), required = False)
Run Code Online (Sandbox Code Playgroud)
然后当你在新的类中重写它时它将保持它的位置.
ryc*_*ych 45
首先,如果您不希望用户修改数据,那么简单地排除该字段似乎更简洁.将其作为隐藏字段包含只是添加更多数据以通过网络发送,并邀请恶意用户在您不希望它们时对其进行修改.如果你有充分的理由包含该字段但隐藏它,则可以将关键字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.
Run Code Online (Sandbox Code Playgroud)
然后在你看来:
form = MyModelForm(hide_condition=True)
Run Code Online (Sandbox Code Playgroud)
我更喜欢这种方法来修改视图中的模型形式的内部,但这是一个品味问题.
anj*_*505 19
对于普通形式,你可以做到
class MyModelForm(forms.ModelForm):
slug = forms.CharField(widget=forms.HiddenInput())
Run Code Online (Sandbox Code Playgroud)
如果您有模型表单,则可以执行以下操作
class MyModelForm(forms.ModelForm):
class Meta:
model = TagStatus
fields = ('slug', 'ext')
widgets = {'slug': forms.HiddenInput()}
Run Code Online (Sandbox Code Playgroud)
您也可以覆盖__init__方法
class Myform(forms.Form):
def __init__(self, *args, **kwargs):
super(Myform, self).__init__(*args, **kwargs)
self.fields['slug'].widget = forms.HiddenInput()
Run Code Online (Sandbox Code Playgroud)
如果您希望该字段始终隐藏,请使用以下命令:
class MyForm(forms.Form):
hidden_input = forms.CharField(widget=forms.HiddenInput(), initial="value")
Run Code Online (Sandbox Code Playgroud)
如果您希望有条件地隐藏该字段,可以执行以下操作:
form = MyForm()
if condition:
form.fields["field_name"].widget = forms.HiddenInput()
form.fields["field_name"].initial = "value"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
150397 次 |
| 最近记录: |