【问题标题】:How to delete a Django model object automatically after 24 hrs如何在 24 小时后自动删除 Django 模型对象
【发布时间】:2022-01-18 06:48:50
【问题描述】:

我是 django 的新手。我想在特定时间后自动删除模型对象。

这是我要删除的模型

class CustomerOrder(models.Model):
    order_types = (
        ('dinein','Dinein'),
        ('delivery','Delivery'),
        ('pickup','Pickup')
    )
    restaurant = models.ForeignKey(RestaurantDetail,on_delete=models.CASCADE,null=True)
    customer_name = models.CharField(max_length=30,null=True)
    table_no = models.IntegerField(null=True)
    total_price = models.FloatField(null=True,blank=True)
    success = models.BooleanField(default=False,blank=True,null=True)
    status = models.CharField(max_length=15,default='pending',null=True)
    ordered_menu = models.ManyToManyField(OrderedMenu)
    timestamp = models.DateTimeField(default=datetime.datetime.now())
    order_type = models.CharField(max_length=15,default='dinein',choices=order_types)

timestamp 是当前对象的保存时间。
关于如何在特定时间后自动删除模型对象有什么想法吗? (例如 24 小时后)。

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    你有两个选择:

    1. django-celery-beat 用于定期任务。
    2. 设置一个可以通过 bash 运行 manage.py 命令的 cron 作业

    编辑: 按照文档中的说明安装和配置 django-celery-beat 后,您将创建一个每 5 分钟运行一次的 celery 任务,例如:

    import datetime
    from celery.schedules import crontab
    from celery.task import periodic_task
    from django.utils import timezone
    
    @periodic_task(run_every=crontab(minute='*/5'))
    def delete_old_orders():
        d = timezone.now() - datetime.timedelta(hours=24)
        #get expired orders
        orders = CustomerOrder.objects.filter(timestamp__lt=d)
        #delete them
        orders.delete()
        
    

    【讨论】:

    • 你能给我一个django-celery-beat的示例程序吗?
    • @Vaitheeswaran 我编辑答案
    • 如果您一个人并且以前没有做过,在您的项目中设置 celery 可能会非常困难。在 AWS 上设置一个 lambda 函数来轮询您的数据库并删除过期的订单可能会更容易。
    猜你喜欢
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 2017-04-07
    • 2021-10-24
    相关资源
    最近更新 更多