2012-01-04 62 views
4

說我有在Django一個簡單的博客入門型號:Django - 在查詢外鍵id時避免連接?

class Entry(models.Model): 
    author = models.ForeignKey(Author) 
    topic = models.ForeignKey(Topic) 
    entry = models.CharField(max_length=50, default='') 

現在說我要查詢一個作者或話題,但完全排除特定的主題。

entry_list = Entry.objects.filter(Q(author=12)|Q(topic=123)).exclude(topic=666) 

Sinmple就夠了,但我發現,這種原始的SQL包含的話題表的連接,即使它沒有被使用:

SELECT `blog_entry`.`id` 
FROM `blog_entry` 
LEFT OUTER JOIN `blog_topic` 
    ON (`blog_entry`.`topic_id` = `blog_topic`.`id`) 
WHERE ((`blog_entry`.`author_id` = 12 
     OR `blog_entry`.`topic_id` = 123 
     ) 
     AND NOT ((`blog_topic`.`id` = 666 
        AND NOT (`blog_topic`.`id` IS NULL) 
        AND `blog_topic`.`id` IS NOT NULL 
       )) 
    ) 

這是爲什麼?我怎樣才能讓Django只查詢列ID而不連接表?我試過以下,但它給一個FieldError:

entry_list = Entry.objects.filter(Q(author_id=12)|Q(topic_id=123)).exclude(topic_id=666) 

回答

2

我想知道這是否是一個錯誤。

嘗試過類似的例子,我沒有得到任何的filter之前把exclude時加入(但我不使用您的訂單得到它)

+0

同意了,我得到了同樣的事情,你,你,有沒有什麼辦法可以強迫它只使用column_id? – user749618 2012-01-04 09:47:42