Python 3.x 5分钟后自动删除对象

Python 3.x 5分钟后自动删除对象,python-3.x,django-models,django-2.2,Python 3.x,Django Models,Django 2.2,我正在尝试创建一个函数,该函数在发布5分钟后自动删除一个对象 from django.contrib.gis.db import models from django.utils import timezone import datetime class Event(models.Model): name = models.CharField( max_length=100, ) publishing_date = models.DateTim

我正在尝试创建一个函数,该函数在发布5分钟后自动删除一个对象

from django.contrib.gis.db import models
from django.utils import timezone

import datetime

class Event(models.Model):
    name = models.CharField(
        max_length=100,
        )
    publishing_date = models.DateTimeField(
    default=timezone.now,
    blank=True,
    )

    @property
    def delete_after_five_minutes(self):
        time = self.publishing_date + datetime.timedelta(minutes=5)
        if time > datetime.datetime.now():
            e = Event.objects.get(pk=self.pk)
            e.delete()
            return True
        else:
            return False

问题是所有对象都被删除了,而不仅仅是我想要的对象。

您应该交换比较,因此:

if time < datetime.datetime.now():
    # ...
然后使用此管理器,如:

class Event(models.Model):
    # ...
    objects = EventManager()

这将在“批量”中删除这些
事件。

您应该切换到比较,因此
time
。哦,太好了,它已经运行了!我不知道可以使用类似
EventManager
的东西“将对象置于待机状态”。我必须提高Python和Django的技能。谢谢:)@MassimilianoMoraca:还有一个
django softdelete
包可能会/可能不会有帮助:请注意,在默认管理器中过滤基本查询集时要小心,cf。@brunodesshuilliers:我同意。可能最好使用像
softdelete
这样的包,因为这样可以为管理器使用
.active\u objects
等名称。
from django.utils import timezone

class EventManager(models.Manager):

    def get_queryset(self):
        return super().get_queryset().filter(
            publishing_date__gte=timezone.now()-timezone.timedelta(minutes=5)
        )
class Event(models.Model):
    # ...
    objects = EventManager()
Event._base_manager.filter(
    publishing_date__lt=timezone.now()-timezone.timedelta(minutes=5)
).delete()