8

我的 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_manager字段,但我想将此字段的默认值设置为True. 在另一个地方,我想显示表单及其所有字段,包括该is_manager字段,并且我希望它具有默认值False.

我怎样才能做到这一点?似乎是一件微不足道的事情,但我无法弄清楚。

谢谢。

4

2 回答 2

14

您可以使用表单的__init__方法来隐藏(或删除)该字段,即

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)
于 2011-07-16T12:37:34.470 回答
1

如果功能不同,您可以使用从另一种形式继承一种形式并适当显示(即排除字段)。

此外,可以使 Form 的 init 方法接受参数,这可以用于初始化表单的字段值。

于 2011-07-16T13:37:34.040 回答