【问题标题】:Django - build a Facebook story - how to change BooleanField value after X days?Django - 构建 Facebook 故事 - X 天后如何更改 BooleanField 值?
【发布时间】:2020-12-29 19:05:21
【问题描述】:

我正在尝试类似故事的 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

【问题讨论】:

标签: python django


【解决方案1】:
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" 布尔字段。

【讨论】:

  • 我到达了,但有问题无法比较 offset-naive 和 offset-aware 日期时间
  • 尝试将我的答案中的 datetime.now() 替换为 timezone.now() (django.utils.timezone.now) 有关详细信息,请参阅stackoverflow.com/a/10653144/2923245
猜你喜欢
  • 1970-01-01
  • 2020-05-01
  • 1970-01-01
  • 2021-10-03
  • 1970-01-01
  • 2014-05-21
  • 2013-07-04
  • 1970-01-01
  • 2015-05-05
相关资源
最近更新 更多