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