Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在倒计时后删除Django对象?_Django_Django Models - Fatal编程技术网

如何在倒计时后删除Django对象?

如何在倒计时后删除Django对象?,django,django-models,Django,Django Models,在我正在使用的平台中,我们希望用户能够设置他们创建的对象的过期时间。在他们设置的倒计时过期后,应该删除该对象 你建议怎么做 编辑:我应该阐明每个对象的到期时间会有所不同。 < P>最常见的方法是创建一个存储到期时间和列的时间的列,并简单地考虑到期时间后删除的项目。 您必须在针对该表的任何查询中包含一个条件,以便在您打算检索未过期项目列表时筛选出过期项目 如果出于某种原因(如法规要求或业务要求)删除数据很重要,则可以设置定期任务(如cron作业)来删除任何过期的记录。这可以(并且经常)与我上面描述

在我正在使用的平台中,我们希望用户能够设置他们创建的对象的过期时间。在他们设置的倒计时过期后,应该删除该对象

你建议怎么做


编辑:我应该阐明每个对象的到期时间会有所不同。

< P>最常见的方法是创建一个存储到期时间和列的时间的列,并简单地考虑到期时间后删除的项目。 您必须在针对该表的任何查询中包含一个条件,以便在您打算检索未过期项目列表时筛选出过期项目


如果出于某种原因(如法规要求或业务要求)删除数据很重要,则可以设置定期任务(如cron作业)来删除任何过期的记录。这可以(并且经常)与我上面描述的方法结合使用,这样您就可以确信用户看到的数据是正确的,即使自上次运行定期任务以来某些对象已过期。

Jiaaro完全正确:与其依赖于在正确的时间删除它,您应该将创建日期存储在模型内部,然后覆盖此模型的默认查询集。查看更多信息

管理器是添加/更改搜索功能的一种方式。重写
get\u queryset()
会更改执行MyModel.objects.all()时看到的内容。在您的情况下,您的经理将如下所示:

class MyModelManager(models.Manager):
    def get_queryset(self):
        now = datetime.now()
        min_created_at = #now - 30 minutes
        return super(MyModelManager, self).get_queryset().filter(created_at__gt=min_created_at)

class MyModel(models.Model):
    created_at = models.DateField(auto_now_add=True, db_index=True)
    objects = MyModelManager()

然后,除此之外,您还可以间歇性地使用cronjob清除过时的数据。Mauricio的链接展示了如果你感兴趣的话如何做到这一点。这不会改变最终结果,但可以让您的查询速度更快。

您可以阅读这篇精彩的文章,这将有助于我完成cron任务。我们已经创建了at列。您建议使用什么作为到期时间列?它是否应该是另一个时间字段,我们手动添加当前时间和用户输入?这是一个非常好的答案,但是否有一种类似SQL server agent的方法?@joe是否有一个int列指示对象应该生存的分钟数/小时数,或者是否有另一个时间戳并不重要。如果使用另一个时间戳,使用django ORM进行过滤查询会更容易一些(因为过滤查询只依赖于一列。是的,我可能会使用一个时间戳,在收集过期时间的表单中,用户可以输入一个时间量,我会保存当前时间+他们的过期时间。