Ответ 1
Я думаю, что нашел свой ответ.
Сначала я попробовал:
field.widget = field.hidden_widget
который не работал.
Правильный способ:
field.widget = field.hidden_widget()
Я делаю профиль в Django. Есть много дополнительных полей профилей, но я хотел бы показать только два за раз. Как скрыть или удалить поля, которые я не хочу показывать динамически?
Вот что я до сих пор:
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)
Я думаю, что нашел свой ответ.
Сначала я попробовал:
field.widget = field.hidden_widget
который не работал.
Правильный способ:
field.widget = field.hidden_widget()
Можно также использовать
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']
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.
Вы кодируете это в форме. Не имеет ли смысл делать это с помощью CSS и JavaScript в коде шаблона? Скрытие поля так же просто, как установка "display = 'none" и переключение на "block", скажем, если вам нужно отобразить его.
Возможно, какой-то контекст того, что это требование, прояснит это.