2017-02-03 41 views
0

我有這個專欄information_release_counter。還有一個confirmed當「now()」是特定日期時間時更改行。 Django

更新我information_release_counter這樣:

serializer_id.information_release_counter = datetime.datetime.now() + datetime.timedelta(hours=48) 

我想,當

datetime.datetime.now() - serializer_id.information_release_counter == 0

serializer.confirmed是 「真」。但它應該自動發生。

我不知道是否有「觀察者」或類似的東西。

我在讀celery tasketa,但我不知道如何使用它。 :)

我想這一點:

@celery.task 
def set_confirmed_death(user_object): 
    user_object.death_confirmed = True 
    user_object.save() 

與此:

set_confirmed_death(use, countdown=15) 

只是爲了測試,這是行不通的。不知道什麼是錯的。我得到這個錯誤:

TypeError: set_confirmed_death() got an unexpected keyword argument 'countdown'

回答

0

我終於找到了答案。

,我不知道我需要更多的東西不僅僅是一個芹菜......

我跟着這個教程: First Steps

所以我安裝了一個工作。

然後,我澄清一些問題,這條信息:

stack post

最後我適應Django的本教程:

Celery in Django

所以,在我的views.py:

serializer_id.information_release_counter = datetime.datetime.now() + datetime.timedelta(seconds=48) 
set_confirmed_death.apply_async([serializer_id.id], eta=serializer_id.information_release_counter) 

我遇到了datetime.datetime.now的錯誤,但它適用於「now()」。

然後init.pycelery.pytasks.py,正是因爲他們在本教程中描述的(當然,我自己set_confirmed_death功能)

希望它可以幫助別人。

0

您需要更改的information_release_counter值使用datetime.datetime.now,不datetime.datetime.now()。後者總是會得到當前的日期時間,這看起來並不是你想要的(因爲門柱總是改變其他列值)。

然後,創建一個Celery任務來接受具有相關attrs的對象的PK。在調用任務時,以秒爲單位傳遞information_release_counter的值作爲countdown

該任務可以查找對象,更改confirmed的值,並將其保存。

+0

感謝您的回答! '''serializer_id.information_release_counter = datetime.datetime.now()+ datetime.timedelta(hours = 48)'''產生我想要的:)。例如,我在19:58做到了,現在我在那裏'''「2017-02-05 19:58:17.950403 + 01」'''所以,它的工作原理。但我會喜歡,即2月5日19:58發生這種情況'''serializer_id.confirmed = True''' –

+0

是的,但永遠是真的,因爲'now()'總是給出一個新的日期時間? –

+0

確定:)所以,我現在改變'''()'''''現在'''然後? :) –

相關問題