Django:如何隐藏所有表单字段?

Ala*_*amu 0 html python forms django django-forms

我有一个大约8个字段的Django表单类.如何动态地将所有这些表单字段隐藏在我的一个视图中?

样品:

class FormName(forms.Form):
    first_name = forms.CharField(max_length=20, widget=forms.TextInput(attrs="class":"validate[required,first_name]","tabindex":"4"}), required=True)
    middle_name = forms.CharField(max_length=20, widget=forms.TextInput(attrs="class":"validate[middle_name]","tabindex":"5"}), required=False)
    last_name = forms.CharField(max_length=40, widget=forms.TextInput(attrs="class":"validate[required,last_name]","tabindex":"6"}), required=True)
Run Code Online (Sandbox Code Playgroud)

我想这样做的原因是因为我会在其中一个注册页面中使用相同的表单,然后在其他地方再次使用类似的表单,我希望隐藏这些表单字段.我不想创建一个单独的类,使用"widget = forms.HiddenInput()"复制相同的字段.

Ser*_*ney 5

如果您需要具有隐藏输入的表单,您可以通过将其他变量传递给__init__方法来通知您的表单,如:form = FormName(is_hidden=True).您的表单可能如下所示:

class FormName(forms.Form):
    first_name = forms.CharField(max_length=20, widget=forms.TextInput(attrs="class":"validate[required,first_name]","tabindex":"4"}), required=True)
    middle_name = forms.CharField(max_length=20, widget=forms.TextInput(attrs="class":"validate[middle_name]","tabindex":"5"}), required=False)
    last_name = forms.CharField(max_length=40, widget=forms.TextInput(attrs="class":"validate[required,last_name]","tabindex":"6"}), required=True)

    def __init__(self, *args, **kwargs):
        is_hidden = kwargs.pop('is_hidden', None)
        super(FormName, self).__init__(*args, **kwargs)
        if is_hidden:
            self.fields['first_name'].widget = forms.HiddenInput()
            self.fields['middle_name'].widget = forms.HiddenInput()
            self.fields['last_name'].widget = forms.HiddenInput()
Run Code Online (Sandbox Code Playgroud)

在所有其他情况下,您可以将表单用作ussual,而不传递is_hidden变量,它将使用您定义的默认小部件.

此外,您可以迭代self.fields字典,并隐藏所有字段小部件,而不必手动覆盖它们中的每一个