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'を使用していないことです。これは可能ですか?使用する必要のあるデータベースがサブクエリでスティッキーにならないようにしますか?これは問題であるかもしれませんが、セロリ労働者の状況で起きているのですが、セロリとジャンゴORMの組み合わせにはバグがありますか?
このような状況が発生するたびに、select_relatedのようにフルフェッチを実行して解決しました。
b_det = Book.objects.using('some_db').select_related('author').filter(book_name = 'Mark')
だから今、私は問題を解決するための唯一の方法は、事前にすべての私が必要とするデータを決定し、トップレベルの
がをselect_related使用して、すべてのそれらの内部モデルの参照を持っているフェッチていることを確認しています。このような何かが失敗する理由は何ですか?
これをローカルで再作成することはできません。それ以外の場合は、デバッグしていました。私が言ったように、それはかなりランダムです。