如何从Django ModelForm的visible_fields()获取可见字段的类型
解决方案
你可以通过判断字段类型或者对应控件的类型,过滤不需要添加form-control类的布尔/复选框字段,两种常用实现方式如下:
方案1:按字段类型过滤(仅跳过原生BooleanField字段)
需要先导入Django的布尔字段类,在循环中增加类型判断:
from django.forms import BooleanField def __init__(self, *args, **kwargs): super(NewPlayerForm, self).__init__(*args, **kwargs) for visible in self.visible_fields(): # 仅给非布尔类型的字段添加form-control类 if not isinstance(visible.field, BooleanField): visible.field.widget.attrs['class'] = 'form-control'
方案2:按控件类型过滤(跳过所有复选框控件,适配自定义场景)
如果存在自定义字段使用复选框控件但不属于BooleanField的场景,可以直接判断控件类型,过滤更精准:
from django.forms.widgets import CheckboxInput def __init__(self, *args, **kwargs): super(NewPlayerForm, self).__init__(*args, **kwargs) for visible in self.visible_fields(): # 仅给非复选框控件的字段添加form-control类 if not isinstance(visible.field.widget, CheckboxInput): visible.field.widget.attrs['class'] = 'form-control'
补充说明
Django表单字段本身没有内置的type属性,你之前尝试调用的field.type、getType()都不属于Django表单的官方API,因此无法生效,使用isinstance判断类实例是官方推荐的标准类型判断方式。
内容的提问来源于stack exchange,提问作者asprin
相关产品推荐
相关产品推荐

