django:基于类的表单没有错误但无效。怎么了?

时间:2011-07-13 07:49:42

标签: django forms validation

我的表单从.is_valid()返回False,但.errors.non_field_errors()似乎是空的。有没有其他方法可以检查可能导致这种情况的原因?

如果我的日志记录代码出现问题,请输入:

logger.debug('form.non_field_errors(): ' + str(form.non_field_errors()))
logger.debug('form.errors: ' + str(form.errors))

我的表单代码:

class IncorporateForm(forms.Form):
        type_choices = (("LTD", "Private company limited by shares"),
                        ("LTG", "Private company limited by guarantee"),
                        ("PLC", "Public limited company"),
                        ("USC", "Unlimited company with share capital"),
                        ("UWS", "Unlimited company without share capital"))

        country_choices = (("EW", "England and Wales"),
                          ("CY", "Wales"),
                          ("SC", "Scotland"),
                          ("NI", "Northern Ireland"))

        articles_choices = (("MOD", "Model articles"),
                            ("AMD", "Model articles with amendments"),
                            ("BES", "Entirely bespoke articles"))

        name = forms.CharField(initial = "[name] limited")

        registered_office = forms.CharField(widget=forms.Textarea,
                                            label='Registered office address')

        registration_country = forms.ChoiceField(choices=country_choices,
                                                 widget=forms.RadioSelect(renderer=SaneRadioField))

        company_type = forms.ChoiceField(choices=type_choices,
                                         widget=forms.RadioSelect(renderer=SaneRadioField), initial="LTD")

        articles_type = forms.ChoiceField(choices=articles_choices,
                                          initial='MOD',
                                          widget=forms.RadioSelect(renderer=SaneRadioField))

        restricted_articles = forms.BooleanField()

        arts_upload = forms.FileField(label='Articles to upload')

我的观看代码(我发现表单无效的地方):

def incorporate_view(request):
        form = IncorporateForm()
        DirectorsFormset = forms.formsets.formset_factory(OfficerForm, extra=30)
        CapitalFormset = forms.formsets.formset_factory(CapitalForm, extra=30)
        HoldingFormset = forms.formsets.formset_factory(HoldingForm, extra=30)
        AmendsFormset = forms.formsets.formset_factory(ArticlesAmendsForm, extra=50)

        if request.method == 'POST':
                #bind and validate
                form.data = request.POST
                guarantee_form = GuaranteeForm(data=request.POST)
                directors_formset = DirectorsFormset(prefix='directors', data=request.POST)
                capital_formset = CapitalFormset(prefix='capital', data=request.POST)
                holding_formset = HoldingFormset(prefix='holding', data=request.POST)
                amends_formset = AmendsFormset(prefix='amends', data=request.POST)
                save_objects = [] # objects to be saved at the end if there is no error
                user_objects = {} # keyed by email
                individual_objects = {} # keyed by email?

                if(not (form.is_valid() and guarantee_form.is_valid()
                        and directors_formset.is_valid()
                        and capital_formset.is_valid() and
                        holding_formset.is_valid() and
                        amends_formset.is_valid())):
                        dbg_str  = """
                        form.is_valid(): %s
                        guarantee_form.is_valid(): %s
                        directors_formset.is_valid(): %s
                        capital_formset.is_valid(): %s
                        holding_formset.is_valid(): %s
                        amends_formset.is_valid(): %s
                         """ % (form.is_valid(), guarantee_form.is_valid(),
                                directors_formset.is_valid(),
                                capital_formset.is_valid(),
                                holding_formset.is_valid(),
                                amends_formset.is_valid())
                        logger.debug(dbg_str)
                        logger.debug('form.non_field_errors(): ' + str(form.non_field_errors()))
                        logger.debug('form.errors: ' + str(form.errors))

1 个答案:

答案 0 :(得分:3)

分配给form.data不绑定表单 - 你应该在构造对象时传递数据dict(或查看代码并查看设置了哪些标志,但这可能没有记录,因此不推荐)