django-bootstrap-v5 DecimalField 在 ModelForm Class 中抛出错误

django-bootstrap-v5 DecimalField Throwing Errors in ModelForm Class

使用django-bootstrap-v5模块,出现错误:

"init() 得到了意外的关键字参数 'attrs'"

在简单模型的 ModelForm 定义中的 DecimalField 小部件上 class。模型定义如下:

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 模块。

有什么想法吗?

forms.DecimalField 是一种形式 field 而不是 widgetDecimalField 使用的默认小部件是 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': <b>forms.NumberInput</b>(attrs={'class': 'form-control'}),
                }