代码之家  ›  专栏  ›  技术社区  ›  Dmitry Gladkov

需要Django表单集

  •  5
  • Dmitry Gladkov  · 技术社区  · 16 年前

    如何使Django表单集中的所有表单都是必需的?我试图验证所有领域的存在 cleaned_data 重写formset的clean()方法,但它只是在没有显示任何错误的情况下自动失败。

    谢谢!

    源代码:

    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() 变为假,但未显示任何错误。

    2 回复  |  直到 16 年前
        1
  •  0
  •   Arthur Debert    16 年前

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

    如果“有效”为“假”,则“好”,则它自身的验证正在工作。接下来要查找的是模板层。如何检查错误?表单.错误或somefield.errors。

    在这里设置clean方法的方式是,它们的错误不会与任何字段关联,而是应该进入 全部的 厄罗斯槽。

    干杯

        2
  •  0
  •   AJ.    16 年前

    我也遇到了同样的问题,通过检查源代码,找出这些错误存储在哪里。当您重写Formset的Clean方法并引发验证错误时,这些错误将存储在非Form错误属性中。

    因此,在模板中,如果formset的模板变量名为“formset”,则需要添加以下内容:

    {{ formset.non_form_errors }}
    
    推荐文章