2012-11-15 35 views
0

我正在構建類似於stackoverflow使用的標記系統。標籤由名稱和與該標籤關聯的模型實例組成。我找不到任何關於如何聲明這種多對多關係的文檔。通常它只是ManyToMany(模型名稱),但我有很多模型,我想在這個集合中。有沒有人有任何可能有用的指針或資源?Django標記應用程序,定義異構ManyToMany關係

+0

爲什麼不爲每個想要與標籤連接的模型分別創建m2m關係? – j0ker

+0

我不想創建模型和標籤模型之間的依賴關係。如果我將新模型添加到我的系統中,我不想向標記應用程序添加新字段。 – Mike

+0

@Mike您是否正在使用像「django-taggit」或「django-tagging」這樣的模塊或者只是自己的代碼? – inigomedina

回答

0

您可以使用ContentType來執行此操作。甚至有一個在該頁面的文檔中使用標籤的例子。您可能無法使用典型的ManyToMany字段,而是創建一個帶標籤的模型,它具有一個用於標籤模型的ForeignKey和一個GenericForeignKey。

+0

它確實給出了一個帶標籤項目的例子,但我認爲我對如何實現的想法可能有點不同。比如說有一個標籤「FOO」。在我提出的實現中,標籤'Foo'將成爲我表中的一個條目。它包含與引用此標記的所有模型實例的多對多關係。所以如果我想找到所有引用'FOO'的模型實例,我可以做Tag.objects.get(name ='FOO')。references.all()在文檔中的版本中,如果4個對象引用'FOO'標記,那麼tagged_item表中會有4個條目。 – Mike

+0

多對多關係隱式地創建一個表,該關係的每一側都有一個外鍵。基本上,我說的是你需要顯式創建該表。你仍然可以有一個Tag表,但你也需要創建一個TaggedItem表。 – JeffS