2016-05-25 12 views
0

Ich versuche, mein Projekt gut organisiert zu halten, so versuche ich es auf Apps aufgeteilt zu halten. Nehmen Sie eine Blog-App mit einem BlogPost Modell an. Jetzt füge ich dazu eine Tag App hinzu, die ein Tag-Modell mit Fremdschlüssel zum Posten hat. Wenn ich jetzt eine Methode get_tags() in der Blog Klasse schreiben möchte, wäre das eine zirkuläre Referenz. Also ist das ein schlechtes Design? Vielleicht sollte ich solche Methode nicht auf dem Blog schreiben, oder solche verwandten Modelle sollten einfach in der gleichen App sein?
Ich versuche einfach zu lernen, wie man mein (großes) Projekt organisiert. Ich habe viel über Django App-Konzept gelesen, stil haben nicht einen richtigen WegDjango App Struktur und Zirkel Referenz

+2

Bitte geben Sie eine kleine Auswahl Ihrer Modelle an. – Wtower

+0

Ich weiß nicht, ob es ein schlechtes Design ist, aber es ist nicht erforderlich, da django bereits Reverse-Key-Lookups – Sayse

Antwort

1

Der Punkt hier ist, dass Django automatisch Reverse-Lookup erstellt, wenn Sie ein ForeignKey oder ManytoManyField erstellen. Angenommen, Ihre Modelle sind wie folgt:

Blogpost Modell

from django.db import models 

class BlogPost(models.Model): 
    title = models.CharField(_('title'), max_length=200) 
    slug = models.SlugField(_('slug'), unique_for_date='publish') 
    author = models.ForeignKey(User, blank=True, null=True) 
    body = models.TextField(_('body'),) 
    publish = models.DateTimeField(_('publish'), default=datetime.datetime.now) 
    created = models.DateTimeField(_('created'), auto_now_add=True) 

Tag Modell

from django.db import models  
from Blog.models import BlogPost 

class Tag(models.Model): 
    Post = models.ForeignKey(BlogPost,related_name="tags") 

Nun, vorausgesetzt, Sie sind die Schlagworte einer Post in einer Ansicht generieren, können Sie Im Grunde erhalten Sie alle Tags eines Beitrags, indem Sie einfach blogpost.tags_set anrufen, wobei blogpost eine Modellinstanz vonist.

+0

Ans, was, wenn ich nur bestimmte Tags wollen sagen wir von einem bestimmten Datum, oder die neuesten? Sollte ich das in einer Methode schreiben. Es geht um Design - wenn es richtig ist, solche Modelle in Apps aufzuteilen. Ich sehe normalerweise, dass sie nach etwas lesen sollten – user3599803

+0

@ user3599803, die nur 'blogpost.tags_set.filter (erstellt = Datum)' oder etwas dieser Art wäre – r3ign

+0

@ user3599803 Und yeah ist es völlig in Ordnung, Ihre Modelle in verschiedene Apps zu teilen. Es würde tatsächlich auf lange Sicht helfen, Dinge zu berücksichtigen, da sie in verschiedenen Apps modularisiert und leicht zu lokalisieren sind. – r3ign