开发者

Conditionally show and hide a form field and set the field value

I have a form in my Django that looks something like this:

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")
    )

I use this form in two places in my site. One one of the places, I'd like to display the form and all of its fields except the 开发者_开发问答is_manager field but I would like to set the default value of this field to True. In the other place, I'd like to display the form and all of its fields including the is_manager field and I would like it to have a default value of False.

How can I accomplish this? Seems to be a trivial thing but I can't figure it out.

Thanks.


You could use the form's __init__ method to hide (or delete) the field, i.e.

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)


If the functionalities are different, you can use inherit one form from the other and display sutiably(i.e exclude fields).

Also, Form's init method can be made to take arguments, and this can be used to initialize the form's field values.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜