Как вы динамически скрываете поля формы в Django? - PullRequest
15 голосов
/ 10 августа 2009

Я делаю форму профиля в Джанго. Есть много дополнительных полей профиля, но я хотел бы показывать только два одновременно. Как скрыть или удалить поля, которые я не хочу отображать динамически?

Вот что у меня есть:

class UserProfileForm(forms.ModelForm):
    extra_fields = ('field1', 'field2', 'field3')
    extra_field_total = 2

    class Meta:
        model = UserProfile

    def __init__(self, *args, **kwargs):
        extra_field_count = 0
        for key, field in self.base_fields.iteritems():
            if key in self.extra_fields:
                if extra_field_count < self.extra_field_total:
                    extra_field_count += 1
                else:
                    # do something here to hide or remove field
        super(UserProfileForm, self).__init__(*args, **kwargs)

Ответы [ 4 ]

16 голосов
/ 10 августа 2009

Я думаю, что нашел свой ответ.

Сначала я попробовал:

field.widget = field.hidden_widget

, который не работал.

Правильный путь:

field.widget = field.hidden_widget()
3 голосов
/ 20 марта 2012
def __init__(self, *args, **kwargs):
    is_video = kwargs.pop('is_video')
    is_image = kwargs.pop('is_image')
    super(ContestForm, self).__init__(*args, **kwargs)
    if is_video:
        del self.fields['video_link']
        # self.exclude('video_link')
    if is_image:
        del self.fields['image']

используйте delete вместо self.exclude().

3 голосов
/ 08 февраля 2012

Можно также использовать

def __init__(self, instance, *args, **kwargs):    
    super(FormClass, self).__init__(instance=instance, *args, **kwargs)
    if instance and instance.item:
        del self.fields['field_for_item']
0 голосов
/ 10 августа 2009

Вы кодируете это в Форме. Не имеет ли больше смысла делать это, используя CSS и JavaScript в коде шаблона? Скрыть поле так же просто, как установить «display = 'none'» и переключить его обратно в «block», скажем, если вам нужно его отобразить.

Может быть, какой-то контекст, касающийся требований, прояснит это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...