为什么会出现 Django crispy 表单隐藏字段?
Why Django crispy form hidden fields appear?
我有一个模型:
class MyModel(models.Model):
normal = models.CharField(null=True, blank=True, max_length=100)
other = models.CharField(null=True, blank=True, max_length=100)
hidden = models.CharField(null=True, blank=True, max_length=100)
如果我在不使用 exclude
的情况下定义常规表单,则隐藏字段会显示在 DOM(和 UI)中提交按钮之后的 UI 上:
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ('normal', 'hidden')
def __init__(self, *args, **kwargs):
super(MyModelForm, self).__init__(*args, **kwargs)
self.helper = FormHelper(form=self)
self.helper.form_class = 'form-horizontal'
self.helper.label_class = 'col-sm-3 col-md-2'
self.helper.field_class = 'col-sm-9 col-md-10'
self.helper.layout = Layout(
'normal',
Hidden('hidden', 'hidden initial'),
FormActions(
Submit('save', 'Save', css_class='save-entry btn-success'),
)
)
现在,如果我翻转过来,assemble 基本等效的形式但使用 exclude
,隐藏字段不会出现(这正是我们想要的)。
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
exclude = ('other',)
def __init__(self, *args, **kwargs):
super(MyModelForm, self).__init__(*args, **kwargs)
self.helper = FormHelper(form=self)
self.helper.form_class = 'form-horizontal'
self.helper.label_class = 'col-sm-3 col-md-2'
self.helper.field_class = 'col-sm-9 col-md-10'
self.helper.layout = Layout(
'normal',
Hidden('hidden', 'hidden initial'),
FormActions(
Submit('save', 'Save', css_class='save-entry btn-success'),
)
)
我想不通为什么会这样。
Hidden
布局用于创建隐藏输入。您可以添加任何 Hidden
元素,即使它没有在您的表单中声明。在你的例子中,如果你检查元素,你可以看到有一个隐藏的输入叫做 hidden
.
你需要做什么而不是使用 Hidden
布局,你需要做这样的事情:
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ('normal', 'hidden',)
def __init__(self, *args, **kwargs):
super(MyModelForm, self).__init__(*args, **kwargs)
self.helper = FormHelper(form=self)
self.helper.form_class = 'form-horizontal'
self.helper.label_class = 'col-sm-3 col-md-2'
self.helper.field_class = 'col-sm-9 col-md-10'
self.helper.layout = Layout(
'normal',
Field('hidden', type='hidden'),
FormActions(
Submit('save', 'Save', css_class='save-entry btn-success'),
)
)
我有一个模型:
class MyModel(models.Model):
normal = models.CharField(null=True, blank=True, max_length=100)
other = models.CharField(null=True, blank=True, max_length=100)
hidden = models.CharField(null=True, blank=True, max_length=100)
如果我在不使用 exclude
的情况下定义常规表单,则隐藏字段会显示在 DOM(和 UI)中提交按钮之后的 UI 上:
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ('normal', 'hidden')
def __init__(self, *args, **kwargs):
super(MyModelForm, self).__init__(*args, **kwargs)
self.helper = FormHelper(form=self)
self.helper.form_class = 'form-horizontal'
self.helper.label_class = 'col-sm-3 col-md-2'
self.helper.field_class = 'col-sm-9 col-md-10'
self.helper.layout = Layout(
'normal',
Hidden('hidden', 'hidden initial'),
FormActions(
Submit('save', 'Save', css_class='save-entry btn-success'),
)
)
现在,如果我翻转过来,assemble 基本等效的形式但使用 exclude
,隐藏字段不会出现(这正是我们想要的)。
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
exclude = ('other',)
def __init__(self, *args, **kwargs):
super(MyModelForm, self).__init__(*args, **kwargs)
self.helper = FormHelper(form=self)
self.helper.form_class = 'form-horizontal'
self.helper.label_class = 'col-sm-3 col-md-2'
self.helper.field_class = 'col-sm-9 col-md-10'
self.helper.layout = Layout(
'normal',
Hidden('hidden', 'hidden initial'),
FormActions(
Submit('save', 'Save', css_class='save-entry btn-success'),
)
)
我想不通为什么会这样。
Hidden
布局用于创建隐藏输入。您可以添加任何 Hidden
元素,即使它没有在您的表单中声明。在你的例子中,如果你检查元素,你可以看到有一个隐藏的输入叫做 hidden
.
你需要做什么而不是使用 Hidden
布局,你需要做这样的事情:
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ('normal', 'hidden',)
def __init__(self, *args, **kwargs):
super(MyModelForm, self).__init__(*args, **kwargs)
self.helper = FormHelper(form=self)
self.helper.form_class = 'form-horizontal'
self.helper.label_class = 'col-sm-3 col-md-2'
self.helper.field_class = 'col-sm-9 col-md-10'
self.helper.layout = Layout(
'normal',
Field('hidden', type='hidden'),
FormActions(
Submit('save', 'Save', css_class='save-entry btn-success'),
)
)