2009-10-28 5 views
5

Comment rendre tous les formulaires du jeu de formulaires django obligatoires? J'ai essayé de valider la présence de tous les champs dans cleaned_data en remplaçant la méthode clean() de formset mais elle échoue juste silencieusement sans aucune erreur affichée.Formats Django requis

Merci!

code source:

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) 

Il y a 7 formes chacun pour un jour et tous doivent être remplies pour être valide. Dans l'exemple ci-dessus, j'ai juste essayé d'augmenter l'erreur en clean. is_valid() est devenu False, mais aucune erreur n'a été affichée.

+0

Pouvez-vous s'il vous plaît donner plus de détails et le code source? – luc

Répondre

0

Il est un peu difficile à comprendre les erreurs ne sont pas affichées.

Si is_valid est fausse, alors bon, la validation fonctionne. Ensuite, le prochain endroit à regarder est pour la couche de modèle. Comment vérifiez-vous les erreurs? {{form.errors}} ou {{somefield.errors}}.

La façon dont les méthodes propres sont configurées ici, leurs erreurs ne seront associées à aucun champ, mais devraient aller dans le tous les emplacements d'erreur.

Vive

+0

formset.errors est vide bien que formset.is_valid() soit false. On dirait un bug pour moi. –

0

J'ai eu ce même problème et compris où ces erreurs ont été stockées en vérifiant la source. Lorsque vous remplacez la méthode clean d'un formset et déclenchez une erreur de validation, les erreurs sont stockées dans la propriété non_form_errors.

Donc, dans votre modèle, vous devrez ajouter ce qui suit en supposant la variable de modèle pour formset est nommé « formset »:

{{ formset.non_form_errors }}