2017-02-03 68 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

确定:)所以,我现在改变'''()'''''现在'''然后? :) –