2011-09-12 7 views
3

大規模なDjangoアプリケーションを構築していて、データモデルを 'ファイルごとのクラス'構造に分割したいのですが、これを実行しようとすると、いくつかのより複雑なモデルに対する循環依存性の問題。Javaスタイルのファイル構造のDjangoモデル

例えば、私は三つのモデル、すべて別々のファイルに持っている:今のジャンルとジャンルに依存しているので

class Book(models.Model): 
    title = models.CharField(max_length=35) 
    author = models.ForeignKey(Author) 
    genre = models.ForeignKey(Genre) 

class Genre(models.Model): 
    name = models.CharField(max_length=20) 
    sample_book = models.ForeignKey(Book) 

class Author(models.Model): 
    name = models.CharField(max_length=60) 
    preferred_genre = models.ForeignKey(Genre) 

がブックに依存し、私はどこでも帳をインポートするとき、それは円形モデルの依存関係の連鎖を開始します各ファイルは他のファイルからモデルをインポートするためです。どうすればこれを避けることができますか?これは非常に速く大きくなるため、すべてのモデルを1つのファイルにまとめることは望ましくありません。

+1

あなたの質問はそれがあまりにも解決策を持っているこの1 http://stackoverflow.com/questions/895454/django-app-dependency-cycle に似ています。 – codecool

+0

@codecool:ありがとう!それは私の質問に完全に答える! – SPoage

答えて

2

また、文字列としてモデル名を指定することができます。

preferred_genre = models.ForeignKey("Genre") 
+0

ああ!どうもありがとうございました。また、検索で見逃したスレッドを指摘してくれたcodecoolに感謝します。 – SPoage

0

私はそれは設計上の問題ではなく、Djangoの問題だと思います。

ジャンルは書籍の参考情報ではありません。それ以外の場合は、使用している言語/フレームワークが何であれ循環参照を作成します。

sample_bookは、アプリケーションの機能のようです。私はあなたが選んだサンプルブックを保管するためのエンティティを作ることを提案します。

サンプルブックがすべての書籍のランダムブックにすぎない場合は、書籍を返す他の機能を持つことができます。

+0

これは単なる例です。実際のコードは残念ながら秘密ですので、私はそれを共有することはできませんが、実際のプロジェクトはこれよりかなり複雑です。 sample_bookの具体例では正しいかもしれませんが、それは実際の例のポイントではありませんでした。私は参考目的で同様の問題を伝えようとしていました。 – SPoage