2016-10-15 7 views
1

ビューにdbエントリを作成するDjangoアプリケーションがあります。私は新しいエントリのバックグラウンド処理を実行したいと思います。作成したオブジェクトをタスクに送信する代わりに、オブジェクトのIDを送信してから、hereのようにバックグラウンドタスクがdbオブジェクトをフェッチできます。私はバックグラウンドタスクでのオブジェクトを取得しようとすると、しかし、私はエラーが存在しないマッチングクエリを取得Django - データベースエントリ作成時の遅延

# In tasks.py 
@shared_task 
def my_task(model_id): 
    my_model = MyModel.objects.get(pk=model_id) 
    # Do stuff with my_model 

# In views.py: 
def some_view(request): 
    if request.method == 'POST' and request.is_ajax(): 
     instance = MyModel.objects.create(**kwargs) 
     tasks.my_task.delay(instance.id) 
     .... 

:以下は私のコードです。オブジェクトを取得する前にsleep(1)を追加すると、例外として機能します。オブジェクトがDB内に存在する必要があるため、なぜこのエラーが発生するのか分かりません。誰かがこれを解決する方法を知っていますか?私は本当にどこでもスリープコマンドを追加したくありません。

私はDBとしてPostgresを使用しています。

答えて

2

そんなにこの

from django.db import transaction 
with transaction.atomic(): 
    instance = MyModel.objects.create(**kwargs) 
tasks.my_task.delay(instance.id) 
+0

感謝をお試しください!これで何時間も苦労しました! – Johan

+0

アトミックなリクエストが既にあったので、実際にはtransaction.non_atomic_requestsを使用しなければなりませんでした – Johan