您可以使用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)
感謝您的答案,但我認爲這不起作用,因爲當創建後,它執行'self.expires'和'self.created'返回一個'NoneType'。 – Rod
@Rod,我編輯了我的答案,明確設置了'self.created'。這個問題可能是Django在調用save之前不會設置該值。再試一次 。這應該工作。 –
這可行,但它不能解決問題,因爲我需要爲每個帖子調用'active'函數來查看它是否過期。這個想法是Post會自動改變狀態。 – Rod