gpt4 book ai didi

python - 用于指定数据库的 Django queryset "using()"方法不适用于 related_name 查询

转载 作者:行者123 更新时间:2023-12-04 17:57:26 24 4
gpt4 key购买 nike

我注意到 Django 中有一些我一直无法弄清楚的奇怪之处。假设我有一个 Django 应用程序(我使用的是 1.7),它有两个模型:

class Bookstore(models.Model):
name = models.CharField(max_length=50)

class Book(models.Model):
title = models.CharField(max_length=100)
store = models.ForeignKey(Bookstore, on_delete=models.PROTECT, related_name='books')

然后假设我有两个存储数据的数据库,也许是主副本设置——假设主副本在我的设置文件中表示为 default,副本为 replica 。如果我执行以下查询,我会得到一个异常提示

the current database router prevents this relation

store = Bookstore.objects.using('default').get(id=1)
first_book = store.books.using('replica').all().order_by('id')[0]

但是,下面这应该是同一个查询,工作正常:

store = Bookstore.objects.using('default').get(id=1)
first_book = Book.objects.using('replica').filter(store=store).order_by('id')[0]

这是怎么回事?有没有像第一个例子那样使用 related_name 查找但它是否正常工作?谢谢!

最佳答案

查看第一个示例中的 SQL(不使用 using()):

SELECT "book"."id", "book"."title", "book"."store_id"
FROM "book" JOIN "bookstore" ON "book"."store_id" = "bookstore"."id"
WHERE "bookstore"."id" = 1
ORDER BY "book"."id"
LIMIT 1

你看到问题了吗?您不能对两个数据库执行 SELECT

再看看第二个例子中的 SQL:

SELECT "book"."id", "book"."title", "book"."store_id"
FROM "book"
WHERE "book"."store_id" = 1
ORDER BY "book"."id"
LIMIT 1

从一个表中选择数据。

关于python - 用于指定数据库的 Django queryset "using()"方法不适用于 related_name 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39172828/

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