2016-06-13 91 views
1

在獲取我在創建芹菜任務之前創建的對象時出現MyModel matching query does not exist.錯誤。我正在從我的APIView中調用該任務。Django芹菜:芹菜任務中不存在模型對象(ATOMIC_REQUESTS = False)

my_model_obj = MyModel(x=1, y=2) 
my_model_obj.save() 
my_celery_task.delay(my_model_obj.id) 

我的任務函數中,我做的:

@task() 
def my_celery_task(my_model_id): 
    MyModel.objects.get(id=my_model_id) 

我沒有在我的Django的DATABASE配置ATOMIC_REQUESTS PARAM。所以,默認情況下它應該是False。

我認爲這是因爲Django甚至在數據實際保存到數據庫之前就從模型對象釋放控制權。這是一個間歇性的問題,有時會發生,有時可以正常工作。

早些時候,我有類似的問題,我在更新模型對象的值,但更新的值沒有反映在芹菜的任務。爲了做到這一點,我增加了10秒的延遲時間。但是這次我正在尋找一些永久的解決方案。有沒有辦法解決這個問題?在Django或Celery的配置中,我沒有任何配置參數來處理這種行爲。

回答

0

這個問題是因爲我使用TransactionMiddleware,它和@transaction.commit_on_success裝飾器做類似的事情。如果你想繼續使用TransactionMiddleware,你應該考慮使用@transaction.autocommit裝飾者在你的意見芹菜任務,或@transaction.commit_manually