2009-10-28 16 views
5

Jak wykonać wszystkie formularze w formularzu django? Próbowałem sprawdzić obecność wszystkich pól w cleaned_data przesłaniając metodę clean() formset, ale po prostu nie działa ona po cichu, bez wyświetlania żadnego błędu.Wymagane formaty Django

Dzięki!

kod źródłowy:

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) 

Istnieje 7 formy każda na jeden dzień, a wszystkie z nich muszą być wypełnione ważność. W powyższym przykładzie po prostu próbowałem podnieść błąd w czystości. is_valid() stał się fałszywy, ale nie pojawiły się żadne błędy.

+0

Czy możesz podać więcej szczegółów i kod źródłowy? – luc

Odpowiedz

0

Trudno zrozumieć gdzie błędy nie są wyświetlane.

Jeśli is_valid jest Fałsz, to dobrze, walidacja działa. Następnie następne miejsce do wyszukiwania dotyczy warstwy szablonowej. Jak sprawdzasz błędy? {{form.errors}} lub {{somefield.errors}}.

Sposób ustawiania czystych metod w tym miejscu, ich błędy nie będą powiązane z żadnymi polami, ale powinny zostać umieszczone w gnieździe erros wszystkie.

Cheers

+0

formset.errors jest pusty, ale formset.is_valid() ma wartość false. Wygląda jak błąd dla mnie. –

0

miałem ten sam problem i zorientowali się, gdzie te błędy były przechowywane przez sprawdzenie źródła. Po zastąpieniu czystej metody zestawu formularzy i podniesieniu błędu sprawdzania poprawności błędy są przechowywane we właściwości non_form_errors.

Więc w szablonie trzeba by dodać następujące zakładając zmienna szablon dla formset jest nazwany „formset”:

{{ formset.non_form_errors }}