本文介绍了需要Django formets的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何使django formset中的所有表单都需要?我试图验证在 clean_data 中覆盖formset的clean()方法的所有字段的存在,但它只是默认地失败,没有显示任何错误。

How to make all forms in django formset required? I tried to validate presence of all fields in cleaned_data overriding formset's clean() method but it just fails silently without any error displayed.

谢谢!

源代码:

class BaseScheduleForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(BaseScheduleForm, self).__init__(*args, **kwargs)
        self.fields['day'].widget = forms.HiddenInput()
        self.fields['user'].widget = forms.HiddenInput()

    class Meta:
        model = Schedule

    def clean_end_time(self):
        start_time = self.cleaned_data.get('start_time')
        end_time = self.cleaned_data['end_time']

        if start_time and end_time:
            if end_time <= start_time:
                raise forms.ValidationError("End time must be later that start time.")
        return end_time

class BaseScheduleFormset(forms.models.BaseModelFormSet):

    def __init__(self, *args, **kwargs):
        super(BaseScheduleFormset, self).__init__(*args, **kwargs)
        for number, weekday in enumerate(WEEKDAYS):
            self.forms[number].day_name = weekday[1]

    def clean(self):
        raise forms.ValidationError('You must specify schedule for the whole week')

ScheduleFormset = forms.models.modelformset_factory(Schedule, extra=7, max_num=7,
    form=BaseScheduleForm, formset=BaseScheduleFormset)

有一天有7个表单,所有这些表单必须填写才能有效。在上面的例子中,我刚刚尝试在clean中引发错误。 is_valid()变为False,但没有显示错误。

There are 7 forms each for one day and all of them must be filled to be valid. In example above I just tried to raise error in clean. is_valid() became False, but no errors were displayed.

推荐答案

这很难理解哪里错误没有显示。

It's a bit hard to understand where the errors are not being displayed.

如果is_valid是False,那么很好,自己的验证正在工作。接下来的地方就是模板层。你怎么检查错误? {{form.errors}}或{{somefield.errors}}。

If is_valid is False, then good, the validation it self is working. Then the next place to look is for the templating layer. How are you checking for errors? {{form.errors}} or {{somefield.errors}}.

清洁方法在这里设置的方式,他们的错误不会与任何字段相关联,但应该在全部错误插槽中。

The way the clean methods are setup here, their errors will not be associated with any fields, but should go in the all erros slot.

干杯

这篇关于需要Django formets的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-19 21:13