我是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小时后)
2条答案
按热度按时间fcg9iug31#
您有两种选择:
1.定期任务使用
django-celery-beat
。1.设置一个cron作业,通过bash运行www.example.com命令 manage.py command via bash
django-celery-beat
后,您创建了一个celery任务,该任务每5分钟运行一次,例如:t8e9dugd2#
您可以使用您的数据库服务器来为您做这项工作,许多数据库服务器将允许您运行查询在预定的时间间隔。
具体方法取决于您的数据库服务器。在Mysql/MariaDb中,您可以使用以下命令:
注:
djangoapp_customerorder
更改为正确的名称。86400
是一天中的秒数,而我所做的是在我的模型中有一个expiration字段,所以我只需要使用WHERE UNIX_TIMESTAMP(expiry) < UNIT_TIMESTAMP()
而不必添加86400
。要将其部署到您的各种环境中,您可以通过创建一个新的迁移并在其中添加SQL代码来将其添加到Django迁移中,如下所示:
同样,您需要根据需要更改
thedjangoapp
、djangoapp_customerorder
和0001_initial
。您可能需要针对您的环境进一步调整这种方法,但是这种方法在我使用它时是有效的。