我有一个项目,用户决定帖子活动多长时间,所以在一定时间之后帖子会改变状态。
要解决这个问题,至于运行异步任务和性能,我认为最好的选择是使用Celery。
我还没有使用Celery,我只阅读了有关ETA(预计到达时间)和到期的文档,正确here.
我的问题是:
这样做的正确方法(如果可能的话)是什么?
是否建议在模型上使用持续时间字段或日期时间字段(最长持续时间为1天12小时)?
我是否需要为每个帖子或Celery创建一个cron作业才能解决这个问题?
答案 0 :(得分:1)
您可以使用Celery
,并且有一些方法可以将数据库更新挂钩到Celery计划任务,但是对于显示或未显示过期帖子这样的简单情况可能有点过分。
以下是设置计算属性的简单示例。只需引用计算属性active
即可决定是否显示帖子。
import datetime
from django.db import models
from django.utils.timezone import now, localtime
class Post(models.Model):
created = models.DateTimeField(blank=True)
title = models.CharField(max_length=100)
body = models.CharField(max_length=2000)
expires = models.DateTimeField(blank=True)
@property
def active(self):
return self.expires > localtime(now())
def save(self, *args, **kwargs):
self.created = localtime(now())
self.expires = self.created + datetime.timedelta(hours=36)
return super(Post, self).save(*args, **kwargs)