2012-04-10 15 views
1

Ich bin ein einfaches Projekt in Django Erstellung meines Wissens davon und Python zu fördern, im Wesentlichen geht nur Lesezeichen und Tags zu speichern, werden beide Ansichten haben, und es werden drei Modelle sein:
Tag
Lesezeichen
Bookmark_Tag (Beziehungen)Django Projekt/Apps Layout - Richtiger Weg?

Ich las die "Projects vs Apps" Panel in der Django-Dokumentation, aber ich bin immer noch unsicher, wie Sie es auslegen, jetzt ist es alles innerhalb einer Bookmark App, sollte es eine separate App geben für Lesezeichen und eine separate App für Tags, und wenn ja, wo lebt das Modell für die Beziehungen?

Vielen Dank!

Antwort

5

Nein, Sie benötigen keine separate App für jeden. Sie sind eng miteinander verwandt, und es klingt, als würden sie zusammen deine App definieren, nicht getrennt. Wenn Sie später Ihrer Site eine andere Funktionalität hinzugefügt haben, die dieselbe Datenbank und dieselben Einstellungen verwendet, aber nicht viel mit Ihrer aktuellen App geteilt hat, wäre dies eine andere App im selben Projekt.

Siehe Django project models.py versus app models.py und Django: "projects" vs "apps" auf dieser Website sowie Django tips: laying out an application für einige weitere Richtlinien.

Wenn Bookmark s und Tag s haben eine viele-zu-viele-Beziehung, und Sie müssen diese Beziehung (andere als nur die id s der zugehörigen Objekte) zusätzliche Felder hinzufügen können Sie eine ManyToManyField verwenden und stellen Sie die through Tabelle:

class Bookmark(models.Model): 
    # whatever fields you need on Bookmark 
    tags = models.ManyToManyField('Tag', through = 'BookmarkTag') 

class Tag(models.Model): 
    # whatever fields you need on Tag 
    pass 

class BookmarkTag(models.Model): 
    bookmark = models.ForeignKey(Bookmark) 
    tag = models.ForeignKey(Tag) 
    # whatever additional fields you need on the relationship 

die Django-Dokumentation finden Sie auf Extra fields on many-to-many relationships für weitere Informationen.

Verwandte Themen