Python django检查到期后功能
我是一个新手,我正在尝试构建一个函数来检查列表是否过期。如果它过期了,我希望进程中的booleanfield=False 我有什么选择?我找不到任何聪明的方法来做那件事。请帮忙Python django检查到期后功能,python,django,Python,Django,我是一个新手,我正在尝试构建一个函数来检查列表是否过期。如果它过期了,我希望进程中的booleanfield=False 我有什么选择?我找不到任何聪明的方法来做那件事。请帮忙 class Post(models.Model): title = models.CharField(max_length=120) description = models.CharField(max_length=300) in_progress = models.BooleanField(
class Post(models.Model):
title = models.CharField(max_length=120)
description = models.CharField(max_length=300)
in_progress = models.BooleanField(default=True)
created_at = models.DateTimeField(auto_now=False, auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True, auto_now_add=False)
expiration_date = models.DateTimeField(auto_now=False, auto_now_add=False, null=True, blank=True)
duration = models.PositiveIntegerField(default=15)
所以,问题是,进程实际上是一个计算值。为了回答这个问题,我将假设进行中取决于到期日和当前日期。如果当前日期在到期日期之后,则该对象已到期且不再进行
因此,考虑到in_progress依赖于总是已知的东西,但不在数据库中,我建议您不要将in_progress放在数据库中,而只是在运行时计算它。您可以在名为in_progress的Post类上添加一个方法,它可以在调用in_progress时(即,当有人发出请求时)计算in_progress的值。不清楚您到底想做什么。从你的问题中,我了解到可能:
in_progress
设置为False
的方法Post
对象,并在满足某些条件的对象上将设置为False
进行中
字段,您可以设置一个只读属性,根据某些条件返回True
或False
@property
def in_progress(self):
return self.expiration_date > timezone.now()
(时区是django.utils.timezone模块)我相信这样的东西对你有用,尽管我没有测试过,所以可能会有打字错误 所以情况是这样的,每次添加或更新帖子时,都会调用save方法。相同的方法有一些逻辑,可以确定日期是否大于今天,因此将该值设置为False。此逻辑可以是您需要执行的任何日期逻辑,以验证日期是否过期 Django有一个内置的Save方法,每当它的所有模型对象写入数据库时,都会调用该方法。下面的代码是重写类对象的save方法的示例
class Post(models.Model):
title = models.CharField(max_length=120)
description = models.CharField(max_length=300)
in_progress = models.BooleanField(default=True)
created_at = models.DateTimeField(auto_now=False, auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True, auto_now_add=False)
expiration_date = models.DateTimeField(auto_now=False, auto_now_add=False, null=True, blank=True)
duration = models.PositiveIntegerField(default=15)
def save(self, *args, **kw):
## your custom date logic to verify if expired or not.
if self.expiration_date < datetime.datetime.now().date():
self.in_progress = False
super(Post, self).save(*args, **kw)
class Post(models.Model):
title=models.CharField(最大长度=120)
description=models.CharField(最大长度=300)
in_progress=models.BooleanField(默认值=True)
已创建的\u at=models.DateTimeField(auto\u now=False,auto\u now\u add=True)
更新的\u at=models.DateTimeField(auto\u now=True,auto\u now\u add=False)
expiration\u date=models.datetime字段(auto\u now=False,auto\u now\u add=False,null=True,blank=True)
持续时间=models.PositiveIntegerField(默认值=15)
def保存(自,*参数,**千瓦):
##用于验证是否过期的自定义日期逻辑。
如果self.expiration\u date
Hi,我希望它能够不断检查,一旦in_progress=False,它就会隐藏帖子,基本上我只希望帖子存在一段时间。好的。您需要能够查询它吗?比如,您需要能够执行Post.objects.filter(in\u progress=True)
,还是可以执行Post.objects.filter(expiration\u date\u gt=timezone.now())
?是的,这会更好地对所有非活动的帖子进行排序。两个查询都将获得所有非活动的帖子。区别在于这些知识是如何获得的。在第一种情况下,这些知识是外部的:必须定期更新数据库,可能相当于cron作业。在第二种情况下,知识是内部的:它查找过期的对象,因为它知道如何在给定日期的情况下找到它们。持续时间是创建者希望帖子保持活动状态的天数。它可以工作,但是否有其他方法不断检查它是否过期?我想让它在进展中隐藏自己=错误