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