Изменение задачи 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"))