2012-01-04 61 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