赞
踩
关于form.is_valid()总是不成功的原因:
大概率由于你的自定制form类里面有别的属性,然而你在进行input提交的时候并没有将全部属性都提交,这就造成了form.is_valid()的失败
进行动态数据绑定
数据的动态绑定顾名思义,就是每次添加完数据之后,我们可以在别的操作中使用我们已经添加的数据,所以我们在写一些Form的fields字段或者是forms字段时,如果是select标签或者是multiplechoices这种字段时,不能将数据写死,如果只是单纯地写上models.XX.object.all.filter()
的话,这样在页面进行渲染时,只能显示当时数据库的数据,并不能将我们动态添加的再加入进去,所以我们压根就不能在这种字段上直接写我们的选项,我们可以定义__init__函数,这样每次我们在调用我们的Form类的时候,就会执行一次初始化函数,我们在初始化函数中,找到这些字,并给他们添加数据,这样就能实现动态绑定:
class StudentsForm(forms.Form):
name = fields.ChoiceField(
widget=widgets.Select
)
def __init__(self, *args, **kwargs):
super(StudentsForm,self).__init__(*args, **kwargs)
# self.fields['name'].choices = ((1, '小明'), (2, '小刚'),)这种写法只是将菜单写死,不能动态添加
self.fields['name'].choices = Students.objects.all().values_list('id','name')
#这样写我们就可以获得数据库的所有数据
关于widget的问题(html插件):
如果不满意当前fields或这forms字段的样式,可以通过html插件来自定义样式,当然样式不是随意定制,都是有限制的。使用的方法是:在当前的字段上输入widget=forms.标签名
,当然也可以引入widgets模块,方法和forms一样
栗子:
name=fields.CharField(
max_length=32,
min_length=2,
required=True,
error_messages={
'required':'此项不能为空',
'max_length':'字数超过最大限制',
'min_length':'字数不够',
'invalid':'格式错误',
},
widget=widgets.Select(choices=((0,'A',),(1,'B',),(2,'C',))),
)
#这样就能将本来的input框变成下拉菜单框,当然上传的值也需要根据这里来进行修改
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。