
[英]How do you dynamically create a multi-form wizard in Django from the same form?
[英]How do you dynamically hide form fields in Django?
我正在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'”并将其切换回“阻止”一样简单,例如,如果您需要显示它。
也许某些关于要求的背景会澄清这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.