Strukturierung einer Django Applikation

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
cryzed
User
Beiträge: 82
Registriert: Samstag 28. März 2009, 15:53

Ich probiere mich momentan an Django und habe mir eine generische Listen-Applikation vorgenommen. Mit "generische Listen-Applikation" meine ich eine Django Applikation die es einem erlaubt, z.B. für ein Buch, einen neuen Eintrag zu erstellen (Entry) welcher allgemeine, auf ein weites Spektrum anwendbare Felder besitzt:
  • title
    progress (Im falle des Buches: Kapitel)
    status (Current, Completed, On-Hold, Dropped, Planned)
    category (Ein "ForeignKey"-Feld auf ein Kategorie (Category) Model)
    tags (Ein "ManyToManyField" auf ein Tag Model)
    synopsis
    rating (Eine Bewertung die der Benutzer für den ganzen Eintrag festlegen kann)
    alternative_titles (Alternative Titel des Buches (Englisch, Deutsch, ...) die bei der Suche helfen)
    notes (Ein einfaches "TextField" das dem Benutzer erlaubt zusätzlich Notizen zu dem Eintrag zu machen)
Die nicht beschriebenden Felder sollten weitestgehend selbst-erklärend sein.

Jetzt kommt es zu einer Besonderheit: Neben der bisher definierten Modellen (Tag, Category, Entry) gibt es noch ein zusätzliches Model: Progress. Eine neue Instanz dieses Progress Model kann optional vom Benutzer erstellt sobald man, im Falle des Buches, ein neues Kapitel anfängt und das vorherige abschließt - wenn das der Fall ist kann eine Bewertung für das neue Kapitel abgeben sowie einen Kommentar. Dementsprechend gibt es folgende Felder:
  • entry (Ein "ForeignKey"-Feld auf ein "Entry" Model)
    count (Die aktuelle Inkrementierung des Progresses)
    rating
    comment
Wie man sicher merkt ist dies ein Sonderfall weil bereits oben ein Feld: progress ("PositiveSmallIntegerField") definiert worden ist das den aktuellen Fortschritt einfach um eins inkrementiert und natürlich keine Meta-Daten speichert. Das Progress Model wird nur benutzt falls der Benutzer tatsächlich weitere Daten zu der Inkrementierung des aktuellen Eintrags festlegen will. Später im Template würde man dann über eine "view" die entry und progress Listen bekommen wo dann die Möglichkeit besteht über die "progress" Liste zu iterieren und diese in irgendeiner Form mit in das Template einzuarbeiten.

Zusätzlich hatte ich vor die komplette Administration für den eigentlichen Benutzer mittels "Forms" selber zu realisieren anstatt dafür das Django-Admin Interface zu benutzen - das lässt mir viel mehr und vor allen Dingen einfacher Spielraum für die "Forms" und ein bisschen jQuery und zusätzliches Styling. (Ich weiß das es auch über Umwege möglich ist das Admin-Interface an zu passen.) Ganz abgesehen davon wird nur eine lokale Instanz der Django Applikation entweder mit CherryPy oder dem built-in Development Server laufen.

Die "models.py" findet ihr hier: http://paste.pocoo.org/show/165002/ bzw. hier: http://dpaste.com/hold/144634/

Meine eigentliche Frage: Seht ihr irgendwelche schwerwiegenden organisatorischen und/oder denk - Fehler? Wie würdet ihr das mit dem Progress-Model am besten bewerkstelligen? (Meine Lösung kommt mir immer noch etwas "schief" vor).

PS: Kennt ihr ein paar wirklich empfehlenswerte Web-Templates (-Sites) die sich für mein und eventuell auch andere Projekte gut eignen würden?
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Also ich hab dein Problem jetzt nicht so ganz verstanden.

Suchst du vielleicht "generic relations" vom The contenttypes framework? Siehe: http://docs.djangoproject.com/en/dev/re ... tenttypes/

Warum packst du das "zweite processing" nicht auch direkt in's model?

Ansonsten: Nimm doch besser gleich http://code.google.com/p/django-tagging/ für die Tags, dann hast du direkt einige Zusätze, die du ansonsten selbst machen musst.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
cryzed
User
Beiträge: 82
Registriert: Samstag 28. März 2009, 15:53

Ich verstehe nicht ganz wo ich die "generic relations" bei mir anwenden soll. "Processing"? Meinst du eventuell "Progress" und hast dich verlesen? Falls ja, weiß ich leider auch nicht wirklich was du meinst.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Vergiss "generic relations" ;)

Warum machst du nicht ein model "Buch" und ein separates model "Kapitel" Beim Kapitel kann man dann sagen, zu wieviel Prozent es fertig ist, wenn man es bearbeitet.
Wenn man ein neues Buch erstellt, kann man schon mal leere Kapitel anlegen, in dem man eine Liste von Überschriften vergibt. Ein neu erstelltest Kapital hat natürlich 0%.
Somit kann man für jedes Buch auch die Prozente ausrechnen.

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