2

私は Django で一種のソーシャル ネットワークを開発していますが、モデルの結合を維持する方法がわかりません。

Userモデルを介して他のユーザー、写真、ページ(大文字はモデルであるため)にコメントできるモデルがありますComment。すべてのコメントを整理するために、所有者が 1 人で、その所有者に宛てられたすべてのコメントを受け取る Board モデルを作成しました。問題は、その所有者がどのようなものか、つまり、どのモデルに属しているかがわからないことです。それは写真のボードかもしれませんが、ユーザーのボードでもあります。したがって、次のようなモデルになります。

class Board(models.Model):
   category = models.IntegerField()
   owner_id = models.IntegerField()

所有者の ID と所有者のカテゴリを保存して、他のタスクを実行できるようにしていますが、このソリューションではまったく納得できません。友人から、抽象クラスを使用してから、を継承する,Boardを作成するようにアドバイスされましたが、それも役に立たないと思います。について考えましたが、それが私が試みていることを達成する正しい方法であるかどうかはわかりません。どんな提案も聞いて検討します、あなたの助けに感謝します:)UserBoardPicBoardPageBoardBoardGenericRelations

PS:ああ、タイトルがあまり説明的でない場合は申し訳ありませんが、より良いものを見つけることができませんでした. この問題を説明するのは難しい

4

1 に答える 1

3

オプション1

クラスを作成しますBoardOwner。ボードを持つすべてのモデルにそれを継承させ、ボードに との外部キー関係を持たせBoardOwnerます。次に、さまざまな子リンクをスキャンして、どれが「本当の」子であるかを判断する必要があります。これは面倒ですが、すべての複雑さを 1 つのクラスにローカライズします。

オプション 2

ボードを持つ各クラスからボードへの外部キーを持っています。常にボードが所有者のメソッドを介してシステムに入る場合 (または他の場所でのクエリとは対照的に)、使用する外部キーの逆関係を知らせるBoardコードを所有者に含めることができます。Boardおそらく、そのコードを独自のクラスに分解したいと思うでしょう。

オプション 3

使用contenttypes: https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/

このような内容で締めくくります。

于 2012-07-24T22:09:58.460 に答える