2016-05-25 37 views
0

私はプロジェクトを整理したままにしておきたいので、アプリケーションに分割してください。 BlogPostモデルのブログアプリを想定します。 これに、Tagアプリを追加します。このアプリには、Postへの外部キーを持つタグモデルがあります。 get_tags()というメソッドをBlogクラスに記述すると、それは循環参照になります。 それは悪いデザインですか?たぶん私はブログにそのようなメソッドを書くべきではない、あるいはそのような関連するモデルは単に同じアプリ内にあるべきですか?
私は、私の(大きな)プロジェクトの編成方法を学ぼうとしています。私はここでのポイントは、あなたがのForeignKeyかのManyToManyFieldを作成するときにDjangoが自動的に逆引き参照を作成することですDjangoアプリの構造体と循環参照

+2

モデルのサンプルをご用意ください。 – Wtower

+0

djangoは既に逆キーの参照を提供しているので、その悪いデザインがあるかどうかはわかりません – Sayse

答えて

1

を、Djangoアプリケーションの概念について多くを読んだSTIL右の方法を発見していません。 、ビューにポストのタグを生成していると仮定すると、

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

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

今あなたができる

ブログ投稿モデル

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) 

タグモデル:あなたのモデルは次のようにしていると仮定すると、基本的にはblogpost.tags_setを呼び出して投稿のすべてのタグを取得します。ブログポストはのモデルインスタンスです。

+0

特定のタグだけを指定したい場合は、特定の日付から最新のものを言うでしょうか?私はそれをメソッドに書くべきですか?このようなモデルをアプリに分割するのが正しいとすれば、デザインに関することです。私は通常、 'blogpost.tags_set.filter(created = date)'やそのようなものである – user3599803

+0

@ user3599803そして、あなたのモデルを別のアプリケーションに分割するのはまあまあです。さまざまなアプリケーションでモジュール化され、正確に特定することができるようになるため、実際には長期的には説明に役立ちます。 – r3ign

+0

@ user3599803のようなものをいくつか読んだ後に読むべきです。 – r3ign