2016-10-15 31 views
1

我有一個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),它的作用如同例外。我不明白爲什麼我得到這個錯誤,因爲對象應該在數據庫中?有人知道如何解決這個問題嗎?我真的不想在任何地方添加睡眠命令。

我使用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