django表单小部件中的图像字段还是布尔字段?
我试图在widgets字典中添加一个图像字段,但我不知道表单的属性是什么。像forms.TextInput一样,图像字段或布尔字段应该使用什么? 这里的代码给出了widgets字典的image属性中的错误django表单小部件中的图像字段还是布尔字段?,django,widget,modelform,Django,Widget,Modelform,我试图在widgets字典中添加一个图像字段,但我不知道表单的属性是什么。像forms.TextInput一样,图像字段或布尔字段应该使用什么? 这里的代码给出了widgets字典的image属性中的错误 class CreateProductForm(ModelForm): class Meta: model = Product fields = ['name', 'price', 'category', 'description', '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
是正确的选择
对于布尔型,也是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/*'}),
}
与其覆盖所有小部件,不如覆盖\uuuu init\uuuu
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模板中执行这些操作,这样就可以清楚地知道这些类来自何处。查看并