Изменение задачи Celery для запуска по требованию с помощью нажатия кнопки

У меня есть задача celery, которая запускается периодически и получает некоторые данные для всех компаний, использующих определенный бухгалтерский сервис. Теперь мне нужно сделать так, чтобы эта задача выполнялась по требованию нажатием кнопки и получала данные только по текущей компании.

Модифицированная задача сельдерея:

@APP.task
def import_data_for_company(company_id):
    for integration in settings.INTEGRATIONS:
        if integration["owner"]["company_id"] == company_id:
            print("omlette du fromage")

Текущая кнопка в шаблоне Django

{% for integration in settings.INTEGRATIONS %}
    {% if company.company_id == integration.owner.company_id %}
        <div class="button">
        <a class="btn" href="#">Import Data</a>
        </div>
    {% endif %}
{% endfor %}

Мне нужно запустить эту задачу из шаблона Django и передать ID компании в качестве аргумента. Но согласно комментарию this, я не могу передавать аргументы из шаблона Django. Написание пользовательского тега/фильтра шаблона, похоже, здесь не поможет.

Какие у меня есть варианты вызова этой функции через эту кнопку?

Приходится отметить, что я еще очень зеленая в этом деле.

Вы должны создать представление, которое принимает идентификатор вашей компании. В этом представлении вы вызовете import_data_for_company. Затем вы можете перенаправить обратно к вашему первоначальному представлению. Или вы можете вызвать представление с помощью AJAX. Добавьте URL в ваш шаблон соответствующим образом: {% url 'some_name' company.company_id %}

urls.py:

path(
    "your_desired_trigger_url/<id:company_id>/",
    trigger_company_data,
    name="some_name",
),

views.py:

def trigger_company_data(request, company_id):
    import_data_for_company(company_id)
    return HttpResponseRedirect(reverse("your_initial_view"))
Back to Top