2011-09-26 28 views
0

我在Django中的模型之間有兩種關係,一種是FooBar之間的多對多關係,Foo上的一個外鍵指向BarDjango使用錯誤的外鍵進行連接

當我做一個涉及FooBar的查詢時,django堅持使用外鍵而不是M2M來進行連接。

(該M2M是這裏的真實數據,外鍵只是有點緩存,所以我可以通過一定的方法創建的最新Bar

因此,例如,(其中foos是衆多在Bar一對多關係名)

Bar.objects.filter(foos__attribute = True) 

不具有該屬性返回所有Bar S的,但只有一個BarFoo指出在與FK。我如何強制它使用M2M?或者這完全是一個壞主意?

+0

刪除'mysql'關鍵字,因爲它是無關的。 – patrys

+0

爲什麼不在調用'.filter()'的時候使用外鍵名? – patrys

+0

@patrys對不起我的例子吸了。再次檢查一下。 – Dave

回答

0

我想通了,這是肯定的一個實例,「應該用真實的代碼,例如」。

我對所謂的「FOOS」的Bar表中的許多一對多的關係(可以說)。外鍵自動在名爲'foo'的Bar表上創建related_name。我本來就不是叫:

Bar.objects.filter(foos__attribute = TRUE)

就像我說我是。我打電話:

Bar.objects.filter(foo__attribute = TRUE)

,其使用外鍵「富」的自動創建相關的名稱,而不是許多一對多表的名稱'FOOS'。

所以,經驗教訓:

  • 不要讓Django的又爲你
  • 小心多元化決定相關的名字!
  • 發佈SA上的真實例子