gpt4 book ai didi

mysql - Django - 查询外键 ID 时避免连接?

转载 作者:可可西里 更新时间:2023-11-01 07:37:51 25 4
gpt4 key购买 nike

假设我在 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)

很简单,但我发现这个原始 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)

最佳答案

我想知道这是否是一个错误。

尝试一个类似的例子,当把 exclude 放在 filter 之前时我没有加入(但我确实使用你的命令得到它)

关于mysql - Django - 查询外键 ID 时避免连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8724538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com