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.
Eigene Fehlermeldungen im Django-Admin
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…
Vielen Dank!
Wäre das von der Doku her der richtige Ansatz?
http://docs.djangoproject.com/en/dev/re ... -the-admin
Wäre das von der Doku her der richtige Ansatz?
http://docs.djangoproject.com/en/dev/re ... -the-admin
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".
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".
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.
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.
Dafür würde ich gleich ein XML-Field verwenden: http://docs.djangoproject.com/en/dev/re ... /#xmlfield
Laut Doku doch schon?!ferix hat geschrieben:Sehr schöne Sache, aber geht auch die Validierung gegen ein XML-Schema?
Laut Doku doch nicht!?
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…
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!
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!
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?
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 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?
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
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
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!
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!
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?
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?
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!?
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!?
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
eine richtige Lösung wird wohl erst in django 1.2 mit "Model validation" geben, siehe:
http://code.djangoproject.com/ticket/6845
http://wiki.github.com/HonzaKral/django ... validation
http://groups.google.com/group/django-d ... 616feb229b
http://code.djangoproject.com/ticket/6845
http://wiki.github.com/HonzaKral/django ... validation
http://groups.google.com/group/django-d ... 616feb229b