Требуются наборы форм Django

Как сделать все формы в наборе форм django обязательными? Я попытался проверить наличие всех полей в cleaned_data, переопределяя метод 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() стало False, но ошибки не отображались.


person Dmitry Gladkov    schedule 28.10.2009    source источник
comment
Не могли бы вы дать более подробную информацию и исходный код?   -  person luc    schedule 28.10.2009


Ответы (2)


Немного сложно понять, где не отображаются ошибки.

Если is_valid имеет значение False, то хорошо, сама проверка работает. Следующим местом для поиска является шаблонный слой. Как вы проверяете ошибки? {{form.errors}} или {{somefield.errors}}.

Методы очистки настроены здесь таким образом, что их ошибки не будут связаны с какими-либо полями, а должны находиться в слоте all erros.

Ваше здоровье

person Arthur Debert    schedule 28.10.2009
comment
formset.errors пуст, хотя formset.is_valid() имеет значение false. Похоже на ошибку для меня. - person Dmitry Gladkov; 28.10.2009

У меня была такая же проблема, и я выяснил, где хранятся эти ошибки, проверив источник. Когда вы переопределяете чистый метод набора форм и вызываете ошибку проверки, ошибки сохраняются в свойстве non_form_errors.

Таким образом, в вашем шаблоне вам нужно будет добавить следующее, предполагая, что переменная шаблона для набора форм называется «formset»:

{{ formset.non_form_errors }}
person AJ.    schedule 01.07.2010