Python Django queryset用于指定数据库的“using()”方法在相关的\u名称查询上不起作用

Python Django queryset用于指定数据库的“using()”方法在相关的\u名称查询上不起作用,python,django,Python,Django,我注意到在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

我注意到在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')
然后假设我有两个数据库存储数据,可能是一个主副本设置-假设主副本在我的设置文件中表示为默认值,副本为副本。如果我执行以下查询,我会得到一个异常

当前数据库路由器阻止此关系

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

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

这是怎么回事?是否仍可以像第一个示例那样使用相关的_名称查找,但它是否正常工作?谢谢

查看第一个示例中的SQL,不要使用:

你看到问题了吗?不能在两个数据库上进行选择

请看第二个示例中的SQL:

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

从一个表中选择数据。

是否必须跨不同的数据库跳转?我认为你这样做的事实是造成你问题的原因。@MichaelPlatt是的,我这样做是为了我的情况。Django在第二个例子中似乎没有问题,所以我只是想知道是否有一种方法可以将我第一个例子中的queryset更改为做同样的事情,所以我一直在浏览互联网,以防你回来说它必须跳过两个DBs。不幸的是,我找不到任何文学作品能让你做这样的事。我看到过一些例子,你可以使用store.book_set.all,也许你可以尝试使用using,但如果它有效,我会感到惊讶。谢谢,但我想知道我是否已经开始使用第一个例子中使用相关名称的语法,是否需要修改queryset对象,使其像第二个示例那样查询数据库?否。第二个示例是唯一的方法。
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 "book"."id", "book"."title", "book"."store_id"
FROM "book"
WHERE "book"."store_id" = 1
ORDER BY "book"."id"
LIMIT 1