2009-12-28 97 views
0

我怎麼能在Django執行這樣的查詢:Django的特定SQL查詢

SELECT * FROM keywords_keyword WHERE id not in (SELECT keyword_id FROM sites_pagekeyword) 

在最新的版本SVN我們可以使用:

keywords = Keyword.objects.raw('SELECT * FROM keywords_keyword WHERE id not in (SELECT keyword_id FROM sites_pagekeyword)') 

但RawQuerySet不支持過濾器(),計數(),索引和其他東西。有另一種方法嗎?

回答

8

Keyword.objects.exclude(id__in = PageKeyword.objects.all()

Keyword.objects.exclude(id__in=PageKeyword.objects.values('keyword_id')) 

供將來參考,exclude is documented here


編輯:是,你是對的,我糾正了我的答案,參見上面


編輯:更可讀:

Keyword.objects.exclude(pagekeyword__in=PageKeyword.objects.all()) 
+0

是的,謝謝,我忘了排除() – 2009-12-28 18:19:18

1

我測試你的代碼和它的作品並不如預期, 這裏是我的任務,正確的解決方案:

Keyword.objects.exclude(id__in=PageKeyword.objects.values('keyword_id')) 
+0

是的,你是對的。我糾正了我的答案。對於那個很抱歉。 – cethegeek 2009-12-28 21:30:03

+0

我其實覺得我的答案最新的編輯使它更具可讀性...... – cethegeek 2009-12-28 21:33:40