Ich habe ein Django-Formular mit einer Reihe von Feldern, die ich in der Vorlage rendere. Ich habe auch einige direkte HTML-Eingabeelemente, die ich in der Ansicht validieren möchte, indem ich auf die request.POST
vars zugreife. Wenn diese nicht validiert werden, möchte ich einen Fehler in das Django-Formular einfügen, damit ich es auf der Seite anzeigen kann. Gibt es eine Möglichkeit, das zu tun?Django: Hinzufügen von non_field_error aus Sicht?
Antwort
Sie können auch ziemlich elegante add_error() Methode verwenden. Arbeitet für Django> = 1.7.
Wenn Sie field
als None
Form setzen, wird der Fehler als "non_field" behandelt. So :
form.add_error(None, "I'm non-field error")
funktioniert wie ein Zauber.
Nun, Sie können alles in das errors
Wörterbuch des Formulars einfügen, und Feldfehler gehen in errors['__all__']
.
Aber warum halten Sie einige Felder aus dem Django-Formular heraus, nur um ihre Fehler am Ende wieder einzufügen? Warum nicht alle Felder in die Form bringen? Wenn Sie nur eine Modellform verwenden und Felder hinzufügen möchten, können Sie dies in Django tun, indem Sie einfach die Felder auf der Formularebene deklarieren - dann können Sie für sie innerhalb des Formulars saubere Methoden definieren.
class ExtendedModelForm(forms.ModelForm):
extra_field_1 = forms.CharField()
extra_field_2 = forms.CharField()
def clean_extra_field_1(self):
...etc...
Siehe meine andere Frage für Argumentation: http://StackOverflow.com/Questions/4228722/Django-CheckboxSelectMultiple Das Feld erfordert eine Vielzahl von Anpassungen, die irgendwie schwierig ist, es in der Form zu tun. – mpen
@Mark nur, weil Sie die Anzeige anpassen möchten, bedeutet nicht, dass Sie das Feld nicht in das Formular für die Zwecke der Validierung und Fehleranzeige einschließen können. –
Richtig .. wenn ich es richtig nenne, wird Django den Unterschied nicht wissen, oder? – mpen
Hinzufügen zu Daniels Antwort, die spezifische Syntax:
form.errors['__all__'] = form.error_class(["error msg"])
Beachten Sie, dass '__all__'
mit der konstanten NON_FIELD_ERRORS
für eine bessere Kompatibilität ersetzen können (Kredit grafa).
from django.forms.forms import NON_FIELD_ERRORS
- 1. hinzufügen Objekte in der Liste aus Sicht
- 2. Django Vorberechnung in Sicht
- 3. Django verhindern Dateiduplikate in Sicht
- 4. außer Kraft setzt Template-Block direkt aus Sicht Django
- 5. Hinzufügen einer Sicht mit presentModalViewController
- 6. Import von Sicht
- 7. Übergeben von Daten aus Sicht zu Express
- 8. Angular, übergeben Parameter aus Sicht
- 9. Electron - Call-Funktion aus Sicht
- 10. Django: Get ImageField URL in Sicht
- 11. Updating Modell aus der Sicht
- 12. Entfernen Sie uiimageview aus Sicht
- 13. Alter shared mdToolbar aus Sicht
- 14. Android: Viewgroup aus der Sicht?
- 15. CakePHP AppView-Funktion aus Sicht
- 16. ändern Ansicht aus Sicht erscheint
- 17. Wie ein Dekorateur für eine Klasse basierten Sicht schreiben - permision auf Objekt aus Sicht
- 18. Zurück zu verschiedenen Controllern aus einer Sicht
- 19. SQL-Abfrage - Wählen Sie * aus Sicht oder Wählen Sie Spalte1, Spalte2, ... Spalte aus Sicht
- 20. MVC Modell und Controller aus Sicht erstellen
- 21. Hinzufügen von Tags mit Django-Taggit
- 22. Schienen - Berechnungen aus meiner Sicht herausziehen?
- 23. Call URL aus Sicht in Laravel
- 24. URL-Typ aus meiner Sicht nicht verfügbar?
- 25. Unbind Ansicht Modell aus Sicht in Knockout
- 26. Hinzufügen von Reagieren in einem Django-Projekt
- 27. Codeigniter: Aufruf einer Methode aus einer Sicht
- 28. Hinzufügen von Inhalten zu jeder Ansicht (base_site.html) in Django Admin
- 29. Codeigniter: Pass Array von Arrays aus Sicht auf Controller
- 30. Drupal 7 Anzeige Artikel aus Sicht
Für Django> = 1.7 – AliBZ
Danke. Ich habe meine Antwort aktualisiert. – grafa