Как удалить объект модели Django автоматически через 24 часа

Я новичок в 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 часа).

У вас есть два варианта:

  1. Используйте django-celery-beat для периодических задач.
  2. Установите задание cron, которое будет запускать команду manage.py через bash
  3. .

Редактировать: После установки и настройки django-celery-beat, как указано в документации, вы создаете задачу celery, которая будет запускаться каждые 5 минут, пример:

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()
    
Вернуться на верх