Ich habe ein Verständnisproblem. Ich will ein `models.JSONField` haben. Das ist nicht weiter schwer zu bauen. Meine Klasse hat zwei Methoden `get_db_prep_value` und `to_python`, die etwas "JSON-artiges" in einen String verwandeln, damit dieser in der Datenbank als TEXT gespeichert werden kann und aus dem String wieder eine Ansammlung von dict, list und den entsprechenden Basistypen machen.
Nun möchte ich das ganze aber auch im Admin-UI bearbeiten können. Dazu muss ich das Python-Objekt zur Anzeige in einem Textarea in einen JSON-String verwandeln und zum Speichern die Rückrichtung implementieren. Diese kann ich als `clean` in einem `forms.Field` bauen. Aber die Hinrichtung?
Mir scheint, Django sieht nicht vor, Objekte zur Anzeige zu konvertieren! Kann das sein?
Man könnte wohl eine `forms.Textarea` Widget-Unterklasse bauen und dort die Konvertierung "verstecken", doch das Admin-UI ist recht eigen in dem was es benutzt und will da ein `AdminTextareaWidget` haben. Oder ich erbe davon... unbefriedigend.
Stefan
[Django] Konvertieren von Werten für Formulare?
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
`formfield` überschreiben... Wenn das nicht klappt, `value_to_string` angucken (weiß nicht ob das was bringt, nur auf den ersten Blick sieht es passend aus).
Gruß
Gruß
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
@sma: Ich habe was ganz ähnliches gemacht in dem Ausgelagerten Projekt: http://code.google.com/p/django-dbpreferences
Hab mich allerdings gegen JSON entschieden und mein eigenes "serialisieren" Modul genommen.
Interessant für dich dürften diese beiden Dateien sein:
http://code.google.com/p/django-dbprefe ... /models.py
http://code.google.com/p/django-dbprefe ... s/admin.py
Ich wollte auch erst, das man ganz transparent auf die Daten zugreifen kann, hab mich aber im nachhinein dagegen entschieden. z.Z. kann man im admin Panel die serialisierte Form editieren und die Daten in einer richtigen form.
Hab mich allerdings gegen JSON entschieden und mein eigenes "serialisieren" Modul genommen.
Interessant für dich dürften diese beiden Dateien sein:
http://code.google.com/p/django-dbprefe ... /models.py
http://code.google.com/p/django-dbprefe ... s/admin.py
Ich wollte auch erst, das man ganz transparent auf die Daten zugreifen kann, hab mich aber im nachhinein dagegen entschieden. z.Z. kann man im admin Panel die serialisierte Form editieren und die Daten in einer richtigen form.
jens, dein dict hat bereits die richtige Repräsentation oder aus einem anderen Grund musst du die textuelle Darstellung nicht anpassen.
Dauerbaustelle, das value_to_string wird nur beim Serialisieren aufgerufen, nicht um einen Wert in einem Formular anzuzeigen.
Nach wie vor denke ich, hier hat Django ein generelles Problem.
Stefan
Dauerbaustelle, das value_to_string wird nur beim Serialisieren aufgerufen, nicht um einen Wert in einem Formular anzuzeigen.
Nach wie vor denke ich, hier hat Django ein generelles Problem.
Stefan
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
bzw. Ich nutzte pformat zur Darstellung.
Du kannst im JSONField bei formfield() das ganze so patchen, das ein eigenes widget genutzt wird. Dort kannst du dann in render() die JSON Daten wieder serialisieren. So habe ich das früher gemacht, siehe:
http://code.google.com/p/django-dbprefe ... c=svn2&r=2
Du kannst im JSONField bei formfield() das ganze so patchen, das ein eigenes widget genutzt wird. Dort kannst du dann in render() die JSON Daten wieder serialisieren. So habe ich das früher gemacht, siehe:
http://code.google.com/p/django-dbprefe ... c=svn2&r=2
jens, dass es einen Weg gibt, wenn ich das TextArea-Widget ändere, schrieb ich ja. Aber genau das wollte ich vermeiden, weil hier das Admin-UI ein eigenes benutzt. Die ändern bereits alle Widgets. Ich hatte gehofft, ich übersehe einen Weg, doch offenbar ist das eine ärgerliche Beschränkung von Django.
Stefan
Stefan