单击按钮将 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"))