首页 > 解决方案 > 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

标签: pythondjango

解决方案


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"如果您希望能够手动打开和关闭此故事,则此模型上应该只有一个布尔字段。


推荐阅读