单击按钮将 Celery 任务按需更改为 运行
Change Celery task to run on-demand with clicking a button
我有一个 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 模板传递参数。编写自定义模板 tag/filter 似乎无济于事。
通过此按钮调用该函数有哪些选项?
必须注意,我对此仍然很陌生。
您应该创建一个包含您公司 ID 的视图。在此视图中,您将触发 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"))
我有一个 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 模板传递参数。编写自定义模板 tag/filter 似乎无济于事。
通过此按钮调用该函数有哪些选项?
必须注意,我对此仍然很陌生。
您应该创建一个包含您公司 ID 的视图。在此视图中,您将触发 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"))