Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django表单小部件中的图像字段还是布尔字段?_Django_Widget_Modelform - Fatal编程技术网

django表单小部件中的图像字段还是布尔字段?

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']

我试图在widgets字典中添加一个图像字段,但我不知道表单的属性是什么。像forms.TextInput一样,图像字段或布尔字段应该使用什么? 这里的代码给出了widgets字典的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模板中执行这些操作,这样就可以清楚地知道这些类来自何处。

查看并