我遇到了django子查询的问题。当我获取原始的QuerySet时,我指定了需要使用的数据库。我的直觉是后面的子查询最终使用“默认”数据库而不是父查询使用的。django子查询使用的数据库是否粘滞?
我的模型大约看起来像这样(我有几个): -
class Author(models.Model):
author_name=models.CharField(max_length=255)
author_address=models.CharField(max_length=255)
class Book(models.Model):
book_name=models.CharField(max_length=255)
author=models.ForeignKey(Author, null = True)
现在我取表示被称为马克像这样所有书籍查询集: -
b_det = Book.objects.using('some_db').filter(book_name = 'Mark')
再后来某处在代码中,我通过执行类似操作触发子查询: -
if b_det:
auth_address = b_det[0].author.author_address
我的问题是在某些情况下,在我的实时服务器上,任意子查询都会失败,即使该作者的ID有有效数据。我怀疑是子查询没有使用相同的数据库'some_db'。这可能吗?这是否使得需要使用的数据库在子查询中不粘?这只是一个预感,这可能是一个问题,它发生在芹菜工人的背景下,芹菜与django ORM的组合是否有一些缺陷?
我已经通过调用select_related这样来解决这个问题。
b_det = Book.objects.using('some_db').select_related('author').filter(book_name = 'Mark')
所以现在,为我解决问题的唯一办法就是事先确定所有我需要的数据,并确保最高级别取了所有使用select_related这些内部模型引用。任何想法为什么这样会失败?
我无法在本地重新创建,否则我会调试它。就像我说的那样,它非常随意。