0

問題の例

たとえば、モデル、、、Publicationおよび;がPhotoあります。それらはさまざまな方法で相互に関連する可能性があります。特に、出版物には、1)いくつかのイラスト(関連写真)および2)いくつかの言及されたペルソナを含めることができます。イベントには、3)写真と4)関係者を含めることができます。また、5)イベントは出版物で言及される可能性があります。EventPerson

イラストを除いて、関係に追加のデータを関連付ける必要はありません。並べ替えには位置フィールドが必要です。したがって、その場合(#1)は、Illustration写真や出版物を参照したり、位置フィールドを指定したりするような中間モデルを使用しても問題ありません。

しかし、ケース2または4では、複雑になります。

ReferencedPersonたとえば、 (汎用外部キーを介して)任意のタイプのオブジェクトを指すことができるaを指定することは理にかなっているため、パブリケーションとイベントの両方に使用できます。一方、を指定することもできますReferencedEvent。これは、ケース5と3で使用できますが、ケース4でも使用できます。これは、それが人を参照するイベントであり、その逆ではないとは言えないためです。

ReferencedObjectしたがって、ある時点で、2つの一般的な外部キーを使用してモデルを指定することを考えるのに十分なほど乾燥しなくなります。そして、これはクールではありません。これがタグの目的です。タグが別のモデルインスタンスを表すことができれば、それは素晴らしいことです。

アイデア

マシンタグは、名前空間や値、あるいはその両方を含むことができるタグです。それらは次のようnamespace:tag=valueになります(名前空間と値の部分はオプションです)。

マシンタグは、追加のデータを保持するだけでなく、オブジェクト間の関係を表すためにも使用できます。大まかな例はFlickrです。ここでは、たとえば写真にタグを付けることができ、upcoming:event=81334Upcomingへのリンクとして自動的に表示されます。

実装の可能なバリアント

アプリケーションのmachinetagsブランチがありdjango-taggingます。これは非常に一般的であり、そこにあるタグは参照オブジェクトとは見なされません。ヘルパー関数と、「特別な」マシンタグを参照オブジェクトの人間が読める形式の名前に置き換えるテンプレートタグまたはフィルターを提供するアプリを作成することを考えています。

質問

(複数の場合は申し訳ありません。)マシンタグを使用して、そのようなモデル間の関係を構築することは理にかなっていますか?もしそうなら、Djangoでそれを実装するための最良の方法は何でしょうか?中間モデルを使用する方が良い場合はどうなりますか?私はここで間違った問題を解決していますか?

4

1 に答える 1

1

タグ付けの使用は、関係を表すのに適切ではないと思います。もちろん、それはすべて、実行するクエリの種類によって異なります。通常のナビゲーションクエリでは、通常のn:m関係を使用する必要があります。情報構造が事前にわかっている場合は、タグ付けを使用する必要があります。

于 2010-12-18T12:53:21.020 に答える