Как запустить функцию в django в течение заданного времени?
views.py
from django.shortcuts import render, redirect
from .models import Product
from .tasks import set_firsat_urunu
from datetime import datetime
# Create your views here.
def index(request, id):
product = Product.objects.get(id=id)
if request.method == 'POST':
product.name = request.POST.get('name')
product.description = request.POST.get('desc')
product.deadline_at = request.POST.get('deadline_at')
product.firsat_urunu = [False, True][bool(request.POST.get('check'))]
product.save()
set_firsat_urunu.apply_async(args=[id],eta=datetime(2021,8,17,0,10))
return redirect(request.META.get('HTTP_REFERER'))
return render(request, 'product.html', {'product':product})
tasks.py
from celery import shared_task,current_task
from .models import Product
@shared_task(bind=True)
def set_firsat_urunu(id=1):
p = Product.objects.get(id=id)
if p.firsat_urunu == True:
p.firsat_urunu = False
return 'done'
Я хочу запустить задачу с помощью celery и внести изменения в запись в базе данных, когда наступит указанное мной время. Когда я запускаю блоки кода, о которых я говорил выше, хотя celery утверждает, что соответствующая функция была получена, я ничего не вижу в разделе django admin Celery Result и в то же время задача celery не работает, даже если указанное время прошло. Также, когда я передаю apply_async
' args=[id]
с @shared_task(bind=True)
, set_firsat_urunu
выдает ошибку, потому что вы передали 2 параметра, а он принимает только 1.