Python 有条件地显示和隐藏表单字段并设置字段值

Python 有条件地显示和隐藏表单字段并设置字段值,python,django,django-forms,form-fields,Python,Django,Django Forms,Form Fields,我的Django中有一个表单,看起来像这样: class PersonnelForm(forms.Form): """ Form for creating a new personnel. """ username = forms.RegexField( required=True, max_length=30, label=_("Name") ) is_manager = forms.BooleanField( r

我的Django中有一个表单,看起来像这样:

class PersonnelForm(forms.Form):
    """
    Form for creating a new personnel.
    """
    username = forms.RegexField(
        required=True, max_length=30, label=_("Name")
    )
    is_manager = forms.BooleanField(
        required=True, label=_("Is Manager")
    )
我在我的站点的两个地方使用此表单。其中一个位置,我想显示表单及其所有字段,除了
is\u manager
字段,但我想将此字段的默认值设置为
True
。在另一个地方,我希望显示表单及其所有字段,包括
is\u manager
字段,我希望它的默认值为
False。

我怎样才能做到这一点?这似乎是件小事,但我搞不懂


谢谢。

您可以使用表单的
\uuuu init\uuuu
方法隐藏(或删除)字段,即

class PersonnelForm(forms.Form):
    """
    Form for creating a new personnel.
    """
    username = forms.RegexField(
        required=True, max_length=30, label=_("Name")
    )
    is_manager = forms.BooleanField(
        required=True, label=_("Is Manager")
    )

    def __init__(self, *args, **kwargs):
        delete_some_field = kwargs.get('delete_some_field', False)
        if 'delete_some_field' in kwargs:
            del kwargs['delete_some_field']
        super(PersonnelForm, self).__init__(*args, **kwargs)
        if delete_some_field:
            del self.fields['is_manager']
            # or
            self.fields['is_manager'].widget = something_else

#views.py
form = PersonnelForm(...., delete_some_field=True)

如果功能不同,则可以使用“从一个表单继承另一个表单”并适当显示(即排除字段)


此外,表单的init方法可用于获取参数,这可用于初始化表单的字段值。

Hi-Klaas。我将小部件更改为隐藏输入。如何为其指定默认值?谢谢。您可以使用字段的“initial”关键字参数,也可以更改表单的“initial['field']”,我总是忘记哪一个是有效的。