2015-12-06 17 views
0

我有機型Django的傳遞閉包產生錯誤的SQL

class Person(models.Model): 
    # some fields 

class Chat(models.Model): 
    people = models.ManyToManyField(Person) 
    # some fields 

,我想生成所有誰分享一些特定的人至少一個對話的人的查詢集。

我試圖

Person.objects.get(pk=2).chat_set.values_list('people').distinct() 

但是,這給了我[(2,)]當它應該是[(1,),(2,),(3,)]

我又試圖

print(Person.objects.get(pk=2).chat_set 
    .values_list('people').distinct().query) 

這給了我

SELECT DISTINCT "webapp_chat_people"."person_id" FROM 
"webapp_chat" INNER JOIN "webapp_chat_people" ON (
    "webapp_chat"."id" = "webapp_chat_people"."chat_id") 
WHERE "webapp_chat_people"."person_id" = 2 

這顯然是錯誤的!我如何解決它?我寧願不做任何一種「選擇n + 1」。我正在使用1.7.7版本,是否需要升級?

+2

作爲一個猜測(我需要睡覺,無法測試),什麼是Person.objects.filter(chat__people = Person.objects.get (pk = 2))給? – RemcoGerlich

+0

@RemcoGerlich完全有效。好決定。 – Dan

回答

0

作爲一個答案。只需複製@RemcoGerlich評論:

Person.objects.filter(chat__people=Person.objects.get(pk=2))