Seite 1 von 2

Eigene Fehlermeldungen im Django-Admin

Verfasst: Samstag 11. April 2009, 14:02
von ferix
Hallo,

gibt es eine Möglichkeit/Funktion im Django-Admin eigene Fehlermeldungen zu erzeugen?

Hintergrund:
Ich möchte die save()-Methode mit ein paar Extras überschreiben und brauche daher eigene Fehlermeldungen. Diese möchte ich gerne im Admin so platzieren wie die üblichen Fehlermeldungen.

Danke für die Rückmeldung.

Verfasst: Samstag 11. April 2009, 14:05
von apollo13
Klar, adhoc würd ich sagen du überschreibst das get_form vom ModelAdmin, guck einfach mal hier: http://code.djangoproject.com/browser/d ... options.py welche Möglichkeiten es gibt, oder eben in der Dokumentation…

Verfasst: Samstag 11. April 2009, 16:06
von ferix
Vielen Dank!

Wäre das von der Doku her der richtige Ansatz?

http://docs.djangoproject.com/en/dev/re ... -the-admin

Verfasst: Samstag 11. April 2009, 23:11
von apollo13
Jupp, klingt zumindest schon mal gut ;) Ob ich es dann wirklich so machen würde weiß ich nicht, das hängt halt davon ab, was genau du machen willst…

Verfasst: Sonntag 12. April 2009, 17:06
von ferix
Aus Erfahrung kann in diesem Bereich niemand sprechen?

Verfasst: Sonntag 12. April 2009, 19:57
von apollo13
Doch kann ich ;) Aber wie gesagt, es hängt davon ab was du exakt machen willst, möglicherweise ist formfield_for_dbfield ausreichend: http://code.djangoproject.com/browser/d ... ons.py#L71

Wie gesagt, ohne dass du exakt beschreibst was du willst kann ich dir kaum genauere Hinweise geben.

P.S.: Damit wir beide vom gleichen reden, was du unter Fehlermeldungen verstehst, verstehe ich als ValidationError ala "This field is required"/"Select a valid date".

Verfasst: Dienstag 14. April 2009, 16:00
von ferix
Genau um so etwas geht es. Bzw. ganz exakt um folgendes:

Es soll ein XML-File generiert werden, welches dann mit einem Tool gegen ein Schema validiert wird. Sollten bei der Validierung Fehler auftreten, soll dies eben ausgegeben werden.

Verfasst: Mittwoch 15. April 2009, 09:42
von apollo13
Dafür würde ich gleich ein XML-Field verwenden: http://docs.djangoproject.com/en/dev/re ... /#xmlfield

Verfasst: Mittwoch 15. April 2009, 13:22
von ferix
Sehr schöne Sache, aber geht auch die Validierung gegen ein XML-Schema?
Laut Doku doch nicht!?

Und die über 3000 Zeilen große Schema-Datei in RelaxNG umschreiben möchte ich nicht unbedingt ^^

Verfasst: Mittwoch 15. April 2009, 15:10
von apollo13
ferix hat geschrieben:Sehr schöne Sache, aber geht auch die Validierung gegen ein XML-Schema?
Laut Doku doch nicht!?
Laut Doku doch schon?!

Anyways, es umzuschreiben ist wahrscheinlich bescheuert, das stimmt. Dann verwend einfach formfield_for_dbfield oder schreib dir dein eigenes ModelField, dann kannst du es auch außerhalb von Forms verwenden…

Verfasst: Mittwoch 15. April 2009, 15:15
von ferix
schema_path¶
The filesystem path to a RelaxNG schema against which to validate the field.

So steht es in der Doku.
Daher dachte ich ist es nicht möglich!?

Verfasst: Donnerstag 16. April 2009, 10:11
von apollo13
Wenn ich das auf Deutsch übersetzte steht hier klipp und klar:
Der Dateisystempfad zu einem RelaxNG Schema, gegen das das Feld validiert wird.

Aber wie schon gesagt, wenn du kein RelaxNG Schema hast ist das doof…

Verfasst: Donnerstag 16. April 2009, 15:14
von ferix
Ja das meinte ich, dass das doof ist ;)

Wie meintest du das mit dem formfield_for_dbfield?

Bzw. wo finde ich eine Doku wie man ein eigenes ModelField schreibt?
Dann könnte ich dieses schreiben mit Validierung gegen XML-Schema.

Vielen Dank!

Verfasst: Donnerstag 16. April 2009, 15:32
von ferix
Ok die Seite für Custom Model Fields habe ich gefunden.

http://docs.djangoproject.com/en/dev/ho ... el-fields/

Aber die Stelle bzw. der Funktionsname, die relevant ist wo ich dann mein Validierungscode mit Fehlermeldungen angebe find ich nicht!?
Wo ist da der Ansatzpunkt auf dieser Doku Seite?

Verfasst: Donnerstag 16. April 2009, 16:16
von apollo13
ferix hat geschrieben:Ok die Seite für Custom Model Fields habe ich gefunden.

http://docs.djangoproject.com/en/dev/ho ... el-fields/

Aber die Stelle bzw. der Funktionsname, die relevant ist wo ich dann mein Validierungscode mit Fehlermeldungen angebe find ich nicht!?
Wo ist da der Ansatzpunkt auf dieser Doku Seite?
Das machst du mit 'formfield', wie in deinem Link eh beschrieben steht. Mein formfield_for_dbfield ist undokumentiert: http://code.djangoproject.com/browser/d ... ons.py#L71 Damit kannst du nur für den Admin ein anderes Formfield verwenden als gewöhnlich…

Verfasst: Donnerstag 16. April 2009, 16:39
von ferix
Sprich ich muss noch mein eigenes FormField für das Modelfield schreiben!?
Und in dem FormField implementiere ich meine Validierung.

Ok und dann ist mein neues ModelField ebenso meinem FormField zugeordnet wie z.B. hier:

http://docs.djangoproject.com/en/dev/to ... modelforms

Dann könnte ich es also auch für solche Sachen verwenden. Hmmm ganricht schlecht, wenns auch so ist nun :)

Verfasst: Donnerstag 16. April 2009, 18:48
von ferix
Hui ich glaube jetzt blicke ich ein wenig besser durch...habe mich jetzt mal in die Tiefen des Django-Codes begeben und glaube ich eingies verstanden.

Man ordnet dem neuen ModelField ein neues FormField zu, in dem die Validation stattfindet. Und dem neuen FormField wiederum muss man auch ein Widget per Standard zuweisen.
Wenn das alles so hinhaut dann in der Praxis, kann ich dann alles so verwenden wie die bereits bestehenden Fields :)
Cooole Sache!

Verfasst: Mittwoch 13. Mai 2009, 00:01
von ferix
Nachdem ich noch mal alles überdacht habe bin ich zu dem Schluss gekommen, dass es nicht mit einem eigenen ModelField o.ä. geht.

Die Daten, die eingetragen werden, werden ganz normal validiert.
Die Save-Methode möchte ich überschreiben, weil ich nach der Eingabe
der Daten direkt noch eine Aktion mit den Daten vor habe.

Und wenn diese Aktion schief gehen sollte, würde ich gerne eine
Fehlermeldung an der Stelle positionieren, an der auch die Validation Fehlermeldungen im Admin ausgegeben werden.

Oder hat noch jemand eine Alternative?

[Gelöst]

Verfasst: Mittwoch 13. Mai 2009, 15:04
von ferix
Nachdem ich leider keine Rückmeldungen mehr erhalten habe und fleißig selbst am überlegen und probieren war, wie ich das Angesprochene umsetzen könnte, bin ich zu folgender Lösung gekommen:

http://docs.djangoproject.com/en/dev/re ... -the-admin

Wie hier beschrieben habe ich die clean-Methode überschrieben. Dort führe ich die gewünschten Aktionen aus. Gibt es dann bei meiner ausgeführten Aktion ein Fehler werfe ich eine ValidationError-Exception, die eine Fehlermeldung im Django-Admin ausgibt.

Ich denke zwar, dass das eigentlich nicht Sinn der Sache ist, da die clean-Methode ja eigentlich die echten form-Fields validieren soll, aber nur innerhalb dieser Methode werden die ValidationError-Exceptions dann im Admin als Fehlermeldung ausgegeben.

Was haltet ihr von der Lösung!?

Verfasst: Mittwoch 13. Mai 2009, 16:29
von jens