需要Django formets [英] Django formsets required

查看:154
本文介绍了需要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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆