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,而不是一个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': forms.NumberInput(attrs='class': 'form-control'),
                

【讨论】:

谢谢你。你的回答是正确的,解决了问题。

以上是关于django-bootstrap-v5 DecimalField 在 ModelForm 类中抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

matlab如何生成verilog

toFixed

数字公式在Crystal Reports中是否为十进制

自动化excl学习笔记

数据库的基本

C# DataTable 增加行与列