作成したモデル インスタンスが、直後に開始されたセロリ タスクからクエリされたときに見つからないのはなぜですか? 例えば:
# app.views
model = Model.objects.create() # I create my lovely model in a view
from app.tasks import ModelTask # I import my Async celery task
ModelTask.delay(model.pk) # I start the task
それはすべて問題ないように見えます。呼び出し後の任意の時点でクエリを実行するcreate()
と、モデルがデータベースに存在するはずです。
更新 1transaction.autocommit
:ビューに、Django が提供するデフォルトの動作を使用しています。
ObjectDoesNotExist
ただし、以下のタスクは例外をスローします。
# app.tasks
class ModelTask(Task):
def run(self, model_pk):
from app.models import Model
Model.objects.get(pk=model_pk)
私のテストでは、予想どおり、model_pk
正しい正の整数 ID です。
結論
ここで非同期/「別のプロセス」の問題が発生していると思いますが、それが何であるかはわかりません。私が犯している明らかな間違いがあるかのように感じたら.
create()
Django のデフォルトの「自動コミット」アプローチにより、メソッドが呼び出されるとすぐに DB アクションが実行されることが保証されるため、データベース トランザクションが答えになるとは思いません。