Скажем, у меня есть простой блог запись модели в Django:Django - Избегание соединений при запросе идентификаторов внешнего ключа?
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 запрашивать только идентификаторы столбцов и не присоединяться к таблицам? Я пробовал следующее, но это дает FieldError:
entry_list = Entry.objects.filter(Q(author_id=12)|Q(topic_id=123)).exclude(topic_id=666)
Согласен, я получаю одну и ту же вещь, которую вы, как вы, не есть ли способ, вы можете заставить его просто использовать column_id? – user749618