我遇到了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這些內部模型引用。任何想法爲什麼這樣會失敗?
我無法在本地重新創建,否則我會調試它。就像我說的那樣,它非常隨意。