Django报错IntegerField无is_hidden属性如何修复
问题根源
报错的核心原因是对Django ModelForm的widgets配置规则理解错误:
Meta类下的widgets字典,接收的键是字段名,值必须是表单控件(Widget)实例,不能放表单字段(Field)对象。你配置product_price时,错误地把forms.IntegerField(表单字段类)包裹在外层,把它当成控件传给了Django表单渲染逻辑。- Django渲染表单字段时,会读取对应控件的
is_hidden属性判断字段是否为隐藏域,而你传入的IntegerField对象根本没有这个属性,直接触发了AttributeError。 - 额外的逻辑错误:
product_price是整数类型字段,你给它配置forms.FileInput文件上传控件本身也不匹配——FileInput是用于文件上传场景的控件,对应字段类型应为文件字段,和整数字段的输入需求完全不符。
修复方法
按照widgets的配置规则修正代码即可,整数类型价格字段匹配数字输入控件NumberInput,不要在外层嵌套字段类:
class add_product_info(forms.ModelForm): class Meta: model = Products fields = ('product_title','product_price') widgets = { 'product_title':forms.TextInput(attrs={'class':'form-control'}), # 直接写控件实例,无需包裹IntegerField,数字字段对应NumberInput控件 'product_price':forms.NumberInput(attrs={'class': 'form-control'}) }
如果后续需要自定义字段的校验规则、特殊属性,再考虑在Form类下显式定义字段,不要在widgets字典里嵌套字段定义。如果确实要做文件上传功能,需要同步把模型层、表单层的对应字段改成文件类型,再搭配FileInput控件使用。
内容的提问来源于stack exchange,提问作者Mossaddak
相关产品推荐
相关产品推荐

