django窗体窗口小部件中的图像字段或布尔字段



我正试图在小部件字典中添加一个图像字段,但我不知道表单的属性是什么。类似的形式。TextInput图像字段或布尔字段应该使用什么?这里的代码在widgetdictionary的image属性中给了我错误。

class CreateProductForm(ModelForm):
class Meta:
model = Product
fields = ['name', 'price', 'category', 'description', 'image']
widgets = {
'name': forms.TextInput(attrs={'class': 'form-control'}),
'price': forms.NumberInput(attrs={'class': 'form-control'}),
'category': forms.Select(attrs={'class': 'form-control'}),
'description': forms.Textarea(attrs={'class': 'form-control'}),
'image': forms.ImageInput(attrs={'class': 'form-control'}),
}

您可以使用两个文件输入。如果允许删除图像(即将其设置为空白/空(,则应使用ClearableFileInput。如果不是,FileInput是正确的选择。

对于布尔值,CheckboxInput也是Django的默认值。

class CreateProductForm(ModelForm):
class Meta:
model = Product
fields = ['name', 'price', 'category', 'description', 'my_bool', 'image']
widgets = {
'my_bool': forms.CheckboxInput(attrs={'class': 'form-control'}),
'image': forms.ClearableFileInput(attrs={'class': 'form-control', 'accept': 'image/*'}),
}

与其覆盖所有小部件,不如覆盖__init__

class CreateProductForm(ModelForm):
...
def __init__(self, *args, **kwargs)
super().__init__(*args, **kwargs)
for field in self.fields.values():
field.widget.attrs.update({'class': 'form-control'})

您甚至可以将其放入所有表单的单独的mixin或基类中。

就我个人而言,我建议不要在Python中执行任何操作,而是在HTML模板中执行,这样就可以清楚地了解类的来源。

最新更新