[Django] Designfrage

Django, Flask, Bottle, WSGI, CGI…
Antworten
Paramount
User
Beiträge: 5
Registriert: Mittwoch 2. Februar 2011, 21:06

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
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.
Paramount
User
Beiträge: 5
Registriert: Mittwoch 2. Februar 2011, 21:06

Die CouchDB/MongoDB Idee hatte ich ehrlich gesagt auch schon, aber irgendwie trau ich mich da noch nicht so recht ran :-)
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.
Drache
User
Beiträge: 51
Registriert: Montag 29. November 2010, 21:51
Wohnort: Berlin
Kontaktdaten:

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
Piet Lotus
User
Beiträge: 80
Registriert: Dienstag 14. November 2006, 10:40

Hallo zusammen,
könnte man so was nicht auch irgendwie mit Hilfe von dynamischen Attributen lösen?
Viele Grüße
Piet
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.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

@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...

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