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
Antwort
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.
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
@ user3599803, die nur 'blogpost.tags_set.filter (erstellt = Datum)' oder etwas dieser Art wäre – r3ign
@ 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
Bitte geben Sie eine kleine Auswahl Ihrer Modelle an. – Wtower
Ich weiß nicht, ob es ein schlechtes Design ist, aber es ist nicht erforderlich, da django bereits Reverse-Key-Lookups – Sayse