django-bootstrap-v5 DecimalField 在 ModelForm 类中抛出错误
Posted
技术标签:
【中文标题】django-bootstrap-v5 DecimalField 在 ModelForm 类中抛出错误【英文标题】:django-bootstrap-v5 DecimalField Throwing Errors in ModelForm Class 【发布时间】:2021-08-04 04:03:12 【问题描述】:使用 django-bootstrap-v5 模块,我得到错误:
"init() 得到了一个意外的关键字参数 'attrs'"
在一个DecimalField Widget 上为一个简单模型定义一个ModelForm 类。模型定义如下:
class MenuItem(models.Model):
menuname=models.CharField(max_length=20,primary_key=True)
description=models.TextField()
price=models.DecimalField(max_digits = 5, decimal_places = 2)
并且Model Form定义如下:
class MenuItemForm(forms.ModelForm):
class Meta:
model=MenuItem
fields='__all__'
widgets = 'menuname': forms.TextInput(attrs='class': 'form-control'),
'description': forms.Textarea(attrs='class': 'form-control'),
'price': forms.DecimalField(attrs='class': 'form-control'),
错误抛出就行了:
'price': forms.DecimalField(attrs='class': 'form-control'),
如果我将该行更改为:
'price': forms.TextInput(attrs='class': 'form-control'),
然后它没有抛出错误。但我当然更愿意使用 DecimalField 小部件而不是 TextInput 来呈现模型中的底层 DecimalField。
再次使用 django-bootstrap-v5 模块。
有什么想法吗?
【问题讨论】:
【参考方案1】:forms.DecimalField
是一个表单field,而不是一个widget。 DecimalField
使用的默认小部件是 NumberInput
[Django docs],因此您应该使用它:
class MenuItemForm(forms.ModelForm):
class Meta:
model = MenuItem
fields = '__all__'
widgets = 'menuname': forms.TextInput(attrs='class': 'form-control'),
'description': forms.Textarea(attrs='class': 'form-control'),
'price': forms.NumberInput(attrs='class': 'form-control'),
【讨论】:
谢谢你。你的回答是正确的,解决了问题。以上是关于django-bootstrap-v5 DecimalField 在 ModelForm 类中抛出错误的主要内容,如果未能解决你的问题,请参考以下文章