密码框不清除
render_value=True,实现密码错误也不清除,保留上一次输入
示例
forms.CharField(label="密码", widget=forms.PasswordInput(render_value=True))
可以进行选择choice
identity_choice = (
(0, '运动员'),
(1, '裁判员'),
(2, '检录员'),
(3, '赛事策划员'),
(4, '广播管理员'),
(5, '管理员'),
)
identity = models.SmallIntegerField(verbose_name='身份', choices=identity_choice, default=0)
对于需要显示其后面的名字,get_identity_display()
form自行添加指定字段的数据
form里面需要先配置instance这个示例,否则数据库不知道需要更新哪一条数据
form.instance.所要修改的字段名 = 修改的值
获取数据库字段自己生成的id
self.instance.pk
修改指定字段的属性
第一种方式:
self.fields.widget.attrs['属性名'] = ‘属性值’
# 把 school_depart 这个字段的disabled属性设置为disabled
# 实现的效果是该字段不能编辑,只读类型
self.fields['school_depart'].widget.attrs['disabled'] = 'disabled'
第二种方式
self.fields.widget.attrs = {'属性值':'属性值',}
以此类推在字典中可以添加多个属性
# 设置该字段类样式和显示地保留名称
field.widget.attrs = {"class": "form-control", "placeholder": field.label}
注意两者的区别
第一种方式会属于在原有的属性上添加一个新的属性,不改变原来的属性
第二种方式属于覆盖,会把原来的属性给覆盖掉
错误写法
此写法 由于后面使用了attrs = ,所以上面的值给覆盖掉了,相当于没有作用,白写
# 不能修改值的效果
self.fields['school_depart'].widget.attrs['disabled'] = 'disabled'
for name, field in self.fields.items():
field.widget.attrs = {"class": "form-control", "placeholder": field.label}
能实现效果的写法
在该字段原有的属性下添加新的属性
# 这能实现修改值的效果
for name, field in self.fields.items():
field.widget.attrs = {"class": "form-control", "placeholder": field.label}
self.fields['school_depart'].widget.attrs['disabled'] = 'disabled'