mon problème est que j'ai une fonction qui s'exécute tous les 3 jours au moyen de apply_async de céleri. J'ai mis une commande en attente d'annulation si elle n'est pas approuvée dans 2 jours. Le problème est, si l'administrateur le reconsidère et change le statut en attente, le temporisateur devrait redémarrer, l'expiration ne se termine pas. Je ne sais pas si .revoke() de céleri annulera spécifiquement un seul appel .expire(). Je ne veux pas que tous s'arrêtent juste un spécifique. Quelqu'un peut-il aider?Existe-t-il un moyen spécifique d'annuler des tâches dans le céleri django
tasks.py
@app.task(name="expire")
def expire(order_id):
print(order_id)
print("this works")
try:
order = Order.objects.get(id=order_id)
print(order)
except:
print(f"Failed retrieving order object of id {order_id}")
return
if order.status != "P":
return
# Place products back to inventory
line_items = order.orderlineitems_set.all()
for line_item in line_items:
product = line_item.product
quantity = line_item.quantity
product.quantity += quantity
product.save()
# Cancel order
order.status = "C"
print(order.status)
order.save()
views.py
class PurchaseView(View):
@staticmethod
@login_required
@customer_required
def get(request):
cart = Cart(request=request)
if not cart.is_approved:
print("Cart is not approved")
return redirect("/checkout/cart/")
customer = Customer.objects.get(user=request.user)
order = cart.convert_to_order(customer=customer)
cart.reset_cart()
print(order.status)
expire.apply_async(args=(order.id,), eta=datetime.utcnow() + timedelta(days=3))
context = make_context(request)
context["total_price"] = order.total_price
return render(request, 'purchase.html', context)