- ModelForm可以帮助我们生成HTML标签,但是只会生成普通的input框
class UserModelForm(forms.ModelForm):
# 验证name长度最小为3
name = forms.CharField(min_length=2, label='姓名')
class Meta:
model = models.UserInfo
fields = ['name', 'password']
form = UserModelForm()
{{form.name}} 普通的input框
{{form.password}} 普通的input框
重新定义init方法,批量设置
class UserModelForm(forms.ModelForm):
class Meta:
model = models.UserInfo
fields = ['name', 'password']
# 给输入框加上自定义样式,循环找到所有插件,添加了class
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
#循环ModelForm中的所有字段,给每个字段的插件设置
for name, field in self.fields.items():
#字段中有属性,就保留原来的属性,没有属性就增加
if field.widget.attrs:
field.widget.attrs['class'] = 'form-control'
field.widget.attrs['placeholder'] = field.label
else:
field.widget.attrs = {
'class': 'form-control',
'placeholder': field.label
}
每一个form都需要添加一遍比较麻烦,可以自定义一个类,
class BootStrapModelForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for name, field in self.fields.items():
if field.widget.attrs:
field.widget.attrs['class'] = 'form-control'
field.widget.attrs['placeholder'] = field.label
else:
field.widget.attrs = {
'class': 'form-control',
'placeholder': field.label
}
使用的时候继承
class UserModelForm(BootStrapModelForm):
class Meta:
model = models.UserInfo
fields = ['name', 'password']
使用
然后把这个类拆出来,成为一个公共类 在utills中新建一个bootstrap.py文件,写入以下代码
然后使所有的modelform继承BootStrapModelForm