Wie füge ich eine Fehlermeldung an form.non_field_errors in django an?

8

Ich habe ein Formular mit mehreren Feldern. Ich habe separate Validierungsprüfungen für jedes Feld, die über die Formularvalidierung durchgeführt werden. Ich muss jedoch auch prüfen, ob nur wenige Felder ausgefüllt sind, bevor der Benutzer zu einer anderen Ansicht umgeleitet wird. Ich hatte gehofft, ich könnte irgendwie den Fehler an forms.non_field_errors anhängen, da es nicht für ein bestimmtes Feld ist, aber ich bin nicht sicher, was die richtige Syntax dafür wäre. Ich habe online überprüft und gefunden ..

%Vor%

Dies zeigt die Fehlermeldung an, aber es scheint auch die anderen Seiten durcheinander zu bringen und zeigt die Fehlermeldung an, wenn ich auf etwas anderes klicke.

Ich habe es versucht

%Vor%

Dies führt dazu, dass ein 'NoneType' Objekt für mich keinen 'setdefault' Fehler hat.

Ich habe es versucht

%Vor%

Dies scheint nichts zu tun und ich kann die Fehlermeldung in der Ansicht nicht sehen.

Was wäre der beste Weg, dies zu tun? Im Idealfall möchte ich es nicht in der sauberen Methode des Formulars tun. Ich habe das Gefühl, dass ich einen Fehler an das Formular in der Ansicht anhängen könnte.

    
Angela 22.12.2011, 00:52
quelle

3 Antworten

17
  1. Rufen Sie full_clean () auf, dies sollte form._errors initialisieren. Dieser Schritt ist kritisch, wenn Sie es nicht tun, wird es nicht funktionieren.

  2. Erstellen Sie die Fehlerliste , es wird eine Liste mit Nachrichten erstellt, und zwar wie folgt: error_list = form.error_class(['your error messages'])

  3. Weisen Sie die Fehlerliste NON_FIELD_ERRORS zu , Sie müssen NON_FIELD_ERRORS von django.forms.forms importieren und dann Folgendes zuweisen: form._errors[NON_FIELD_ERRORS] = error_list

Hier ist eine Demonstration von einer Shell:

%Vor%     
jpic 22.12.2011, 02:32
quelle
4

Das ist etwas veraltet, aber ich bin kürzlich auf die gleiche Frage gestoßen und wollte das für zukünftige Leser noch genauer beleuchten.

  1. Ab Django 1.6+ wird das Fehlerwörterbuch als form.errors und nicht als form._errors
  2. gespeichert
  3. Wenn Sie form.is_valid () instanziieren, entspricht dies der Ausführung von full_clean ()
  4. NON_FIELD_ERRORS muss nicht importiert werden. Sie können einfach auf den standardmäßigen Wörterbuchschlüssel von __all__ verweisen.

Beispiel:

%Vor%     
asaji 15.04.2014 06:46
quelle
0

self._errors.setdefault('__all__', ErrorList()).extend([""])

    
user2732686 25.04.2014 07:21
quelle

Tags und Links