Django 表单小部件中的图像字段或布尔字段?
Image fields or Boolean fields in django forms widgets?
我正在尝试在小部件字典中添加一个图像字段,但我不知道 属性 用于表单的是什么来执行此操作。像 forms.TextInput 我应该为图像字段或布尔字段使用什么?
这里的代码在小部件字典的图像 属性 中给我错误。
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'}),
}
有两个 file inputs 您可以使用。如果允许删除图像(即将其设置为 blank/null),则应使用 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 或 base class 中用于你所有的表单。
就我个人而言,我建议不要在 Python 中执行任何操作,而是在 HTML 模板中执行此操作,这样就可以清楚地了解 classes 的来源。
我正在尝试在小部件字典中添加一个图像字段,但我不知道 属性 用于表单的是什么来执行此操作。像 forms.TextInput 我应该为图像字段或布尔字段使用什么? 这里的代码在小部件字典的图像 属性 中给我错误。
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'}),
}
有两个 file inputs 您可以使用。如果允许删除图像(即将其设置为 blank/null),则应使用 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 或 base class 中用于你所有的表单。
就我个人而言,我建议不要在 Python 中执行任何操作,而是在 HTML 模板中执行此操作,这样就可以清楚地了解 classes 的来源。