如何在Django中动态隐藏表单字段?

21 投票
4 回答
21219 浏览
提问于 2025-04-15 13:30

我正在用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)

4 个回答

4
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()

4

也可以使用

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']
26

我想我找到了我的答案。

首先我试了这个:

field.widget = field.hidden_widget

但是没有成功。

正确的方法其实是:

field.widget = field.hidden_widget()

撰写回答