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