繁体   English   中英

在Django表单中设置动态选项时进行验证

[英]Validation when dynamic choices are set in django forms

几个小时前我遇到了一个小问题,我想在从用户提交的POST中获取数据后保存表格。

事实是,我的意思是在调用__init__方法之后动态地为多选选择设置了选择。 就像很多答案一样。

因此,当清理数据时就会出现问题,并且由于此时没有选择,因此调用了clean()方法时,我得到了正常错误“选择一个有效的选择。 bla,bla,bla'。

编辑:问题的一个示例

先前的代码(无效):

class myForm(forms.Form):

    myField = forms.MultipleChoiceField()

    def __init__(self, *args, **kwargs):
        self.some_data = kwargs.pop('some_data')
        super(myForm, self).__init__(*args, **kwargs)

        dynamicChoices = Objects.objects.filter(some_filter=self.some_data)
        self.fields['myField'] = forms2.MultipleChoiceField(choices=dynamicChoices)

经过一番研究和无法衡量的挫败感,我找到了解决方案。 将在表单上再次调用clean方法。 根据这个 django docs-page,可以帮助我的方法是full_clean()

值得一提的是,我使用的动态选择不需要特殊的验证,问题是,在用户提交选择的选择后,在表单的构造中对选择的选择进行了比较时,没有选择分配给该字段。

带有full_clean()方法的代码可使一切正常运行。

class myForm(forms.Form):

    myField = forms.MultipleChoiceField()

    def __init__(self, *args, **kwargs):
        self.some_data = kwargs.pop('some_data')
        super(myForm, self).__init__(*args, **kwargs)

        dynamicChoices = Objects.objects.filter(some_filter=self.some_data)
        self.fields['myField'] = forms2.MultipleChoiceField(choices=dynamicChoices)

        super(myForm, self).full_clean()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM