python - Django - 构建 Facebook 故事 - X 天后如何更改 BooleanField 值?
问题描述
我正在尝试类似故事的 FB 应用程序。我不知道如何在 X 天后更改 BooleanField 值?
class Story(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
title = models.CharField(max_length=200, unique=True)
image = models.ImageField(upload_to='story/')
created_on = models.DateTimeField(auto_now_add=True)
is_active = models.BooleanField(default=True)
def __str__(self):
return self.title
@property
def is_active(self):
if self.created_on < #(self.created_on + 2 days)#
return False
return True
解决方案
class Story(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
title = models.CharField(max_length=200, unique=True)
image = models.ImageField(upload_to='story/')
created_on = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
@property
def is_active(self):
if (self.created_on + timedelta(days=2)) > datetime.now(): # (self.created_on + 2 days)#
return False
return True
或者更好:
class Story(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
title = models.CharField(max_length=200, unique=True)
image = models.ImageField(upload_to='story/')
created_on = models.DateTimeField(auto_now_add=True)
active_until = models.DateTimeField()
def __str__(self):
return self.title
@property
def is_active(self):
return self.active_until >= datetime.now()
所以教训是你不需要在一段时间后更新数据库。相反,最好对模型进行结构化,使它们是无状态的并且不需要更新。"is_active"
如果您希望能够手动打开和关闭此故事,则此模型上应该只有一个布尔字段。