2012-01-04 8 views
4

は、私はジャンゴでシンプルなブログのエントリーモデルを持っていると言う: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

これはバグかどうか疑問に思う。合意された同様の例を試す

、私はfilterexcludeを入れたときに全く参加取得しない(しかし、私はあなたの順序を使用してそれを得るか)

+0

、私は、あなたと同じことにあなたを得ることができますどのような方法があります強制的にそれだけでcolumn_idを使用する? – user749618

関連する問題