Как удалить объект модели 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 часа).
У вас есть два варианта:
- Используйте
django-celery-beat
для периодических задач. - Установите задание cron, которое будет запускать команду manage.py через bash .
Редактировать:
После установки и настройки 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()