Eigene Fehlermeldungen im Django-Admin

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
ferix
User
Beiträge: 128
Registriert: Sonntag 1. Juni 2008, 18:21

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.
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

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…
ferix
User
Beiträge: 128
Registriert: Sonntag 1. Juni 2008, 18:21

Vielen Dank!

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

http://docs.djangoproject.com/en/dev/re ... -the-admin
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

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…
ferix
User
Beiträge: 128
Registriert: Sonntag 1. Juni 2008, 18:21

Aus Erfahrung kann in diesem Bereich niemand sprechen?
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

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".
ferix
User
Beiträge: 128
Registriert: Sonntag 1. Juni 2008, 18:21

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.
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Dafür würde ich gleich ein XML-Field verwenden: http://docs.djangoproject.com/en/dev/re ... /#xmlfield
ferix
User
Beiträge: 128
Registriert: Sonntag 1. Juni 2008, 18:21

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 ^^
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

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…
ferix
User
Beiträge: 128
Registriert: Sonntag 1. Juni 2008, 18:21

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!?
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

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…
ferix
User
Beiträge: 128
Registriert: Sonntag 1. Juni 2008, 18:21

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!
ferix
User
Beiträge: 128
Registriert: Sonntag 1. Juni 2008, 18:21

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?
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

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…
ferix
User
Beiträge: 128
Registriert: Sonntag 1. Juni 2008, 18:21

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 :)
ferix
User
Beiträge: 128
Registriert: Sonntag 1. Juni 2008, 18:21

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!
ferix
User
Beiträge: 128
Registriert: Sonntag 1. Juni 2008, 18:21

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?
ferix
User
Beiträge: 128
Registriert: Sonntag 1. Juni 2008, 18:21

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!?
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:


GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten