Условно показать и скрыть поле формы и установить значение поля - PullRequest
6 голосов
/ 16 июля 2011

В моем 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.

Как мне это сделать?Кажется, это тривиальная вещь, но я не могу понять это.

Спасибо.

Ответы [ 2 ]

12 голосов
/ 16 июля 2011

Вы можете использовать метод формы __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)
1 голос
/ 16 июля 2011

Если функции различны, вы можете использовать наследование одной формы от другой и выводить ее соответствующим образом (т.е. исключать поля).

Кроме того, метод init формы может принимать аргументы, и его можно использовать для инициализации значений полей формы.

...