Seite 1 von 1

[Django] Designfrage

Verfasst: Mittwoch 22. Juni 2011, 20:54
von Paramount
Hallo,

ich hätte mal eine Designfrage.
Folgendes will ich realisieren. Ich möchte das ein administrator Formularfelder auf einer Page frei definieren kann.
Also sozusagen ein Formular welches beliebig um Felder erweitert werden kann. Jemand einen Tipp wie man sowas elegant löst?
Kann ja schlecht die models zur Laufzeit anpassen und dann das Datenbank schema migrieren...

Eine Idee von mir war einfach alles als XML in einem Textfeld in der DB zu speichern und das Schema eben auch als XML zu hinterlegen, daraus könnte ich auch das Formular generieren, aber so richtig schön finde ich das nicht...

Würde mich über einige Tipps freuen, hoffe ich habe mein Problem verständlich formuliert :-)

Grüße

Re: [Django] Designfrage

Verfasst: Mittwoch 22. Juni 2011, 21:06
von deets
Hoert sich nach einem praedestinierten Fall fuer eine Dokument-DB an. Sowas wie CouchDB zB. Letztlich ist aber auch dein Ansatz gangbar, ich wuerde dir nur raten, statt XML besser JSON zu nehmen - da hast du wenigstens ansatzweise eine Chance, die Daten auch im SQL-Admin-View irgendwie zu entziffern.

Die Schema-Definition kann aber ruhig Standard-ORM-kram sein, ist halt ne Liste von Felddefinitionen, potentiell mit Validatoren.

Re: [Django] Designfrage

Verfasst: Mittwoch 22. Juni 2011, 21:20
von Paramount
Die CouchDB/MongoDB Idee hatte ich ehrlich gesagt auch schon, aber irgendwie trau ich mich da noch nicht so recht ran :-)

Re: [Django] Designfrage

Verfasst: Mittwoch 22. Juni 2011, 21:42
von deets
Schisser... ;) Es ist wirklich ziemlich simpel. Die Frage ist natuerlich, ob man sich die Komplexitaet einer weiteren Technologie einfangen will. Aber mit dem python couchdb Modul ist die Benutzung nun wirklich kinderleicht, und sich mal mit sowas auseinanderzusetzen ist sicher hilfreich.

Re: [Django] Designfrage

Verfasst: Donnerstag 23. Juni 2011, 20:50
von Drache
Paramount hat geschrieben:Die CouchDB/MongoDB Idee hatte ich ehrlich gesagt auch schon, aber irgendwie trau ich mich da noch nicht so recht ran :-)
Paramount, deets hat wirklich recht.
Als Hobbyprogrammierer und Python Anfänger hab ich 14 Tage gebraucht um
meine erste CouchDB Applikation zu schreiben.
CouchDB ist wirklich cool und scheint mir Ideal für deinen Zweck.

Grüße
Drache

Re: [Django] Designfrage

Verfasst: Donnerstag 23. Juni 2011, 20:52
von Piet Lotus
Hallo zusammen,
könnte man so was nicht auch irgendwie mit Hilfe von dynamischen Attributen lösen?
Viele Grüße
Piet

Re: [Django] Designfrage

Verfasst: Freitag 24. Juni 2011, 10:55
von deets
Dynamische Attribute sind eine Kruecke in relationalen Datenbanken, um eben flexible Dokuementstrukturen aufbauen zu koennen. Natuerlich *kann* man damit so ein Problem loesen. Oder, wie der OP schon vorschlug, einfach BLOBS mit XML/JSON/Binaerformaten speichern.

Aber wenn man nicht muss, sollte man nicht. Muessen ist natuerlich relativ - wenn es nur eine beschraenkte Funktionalitaet ist, dann ist der Aufwand, zwei DB-Systeme zu unterhalten uU nicht gerechtfertigt.

Doch oft genug wird das relationale Modell ueberbeansprucht. Ich finde zB eigentlich alles, was CMS ist, gehoert da nicht rein - macht immer nur riesen Aerger. Da ist eine Dokumen/Objektbasiert DB besser geeignet, wie eben CouchDB oder ZODB.

Re: [Django] Designfrage

Verfasst: Freitag 1. Juli 2011, 23:07
von jens
@Paramount: Hört sich ein bisschen so an wie mein http://code.google.com/p/django-dbpreferences/
Dabei erstellt man eine django form und deren Daten werden als eine Art JSON geispeichert.

Allerdings nutzte ich nicht wirklich JSON, sondern pprint.pformat() und einen eigenen weg zurück: https://github.com/jedie/django-dbprefe ... ta_eval.py

Bei dbpreferences geht es allerdings eigentlich darum Einstellungsdaten, nicht in der settings.py zu speichern, sondern in der DB um sie einfach im Django Admin Panel bearbeiten zu können...

Das bearbeiten kann man dann über die definierte form machen oder aber man editiert die pprint.pformat() Daten selber.


Ich denke, es kommt auf die zu erzielende Performance an, ob man Serialisierte Daten in eine relationale Datenbank packt oder dafür was passenderes nimmt...