Как запустить функцию в 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.

Вернуться на верх