Remove shopping cart django

Viewed 93

how can I delete a user's shopping cart automatically after a certain time (for example, after a one day)?

my view:
   def remove_cart(request, id):
     url = request.META.get('HTTP_REFERER')
     Cart.objects.get(id=id).delete()
     return redirect(url)

my models :

   class Cart(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    variant = models.ForeignKey(Variants, on_delete=models.CASCADE)
    quantity = models.PositiveIntegerField()
    create = models.DateTimeField(auto_now_add=True)
1 Answers

You can remove all Carts one day after creation with:

from django.utils.timezone import now
from datetime import timedelta

Cart.objects.filter(
    create__lte=now()-timedelta(days=1)
).delete()

You can define this in a custom django-admin command [Django-doc]. You can work with celery or another queue mechanism to schedule a periodic task.

You can also add an updated field to only remove elements in cas these are no longer edited 24 hours ago:

class Cart(models.Model):
    # …
    update = models.DateTimeField(auto_now=True)

Then you delete the Carts with:

from django.utils.timezone import now
from datetime import timedelta

Cart.objects.filter(
    update__lte=now()-timedelta(days=1)
).delete()
Related