当前位置:   article > 正文

Form组件的一些问题_the form contains the following error: namespace i

the form contains the following error: namespace is not valid
  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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  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框变成下拉菜单框,当然上传的值也需要根据这里来进行修改
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/660551
推荐阅读
相关标签
  

闽ICP备14008679号