Form组件的一些问题

  1. 关于form.is_valid()总是不成功的原因:

    大概率由于你的自定制form类里面有别的属性,然而你在进行input提交的时候并没有将全部属性都提交,这就造成了form.is_valid()的失败

  2. 进行动态数据绑定

    数据的动态绑定顾名思义,就是每次添加完数据之后,我们可以在别的操作中使用我们已经添加的数据,所以我们在写一些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')
        #这样写我们就可以获得数据库的所有数据
  1. 关于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框变成下拉菜单框,当然上传的值也需要根据这里来进行修改
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值