我有一个模型叫Publication,我想在 Django Admin 中的列表视图中添加一个按钮,该按钮将允许触发 Celery 任务。
admin.py:
from django.contrib import admin\nfrom .models import Publication\n\n\nclass PublicationAdmin(admin.ModelAdmin):\n change_list_template = "variants/admin_publication_list.html"\n\n def update(self, request):\n # trigger task\n # redirect to admin list\n\nadmin.site.register(Publication, PublicationAdmin)\nRun Code Online (Sandbox Code Playgroud)\n\nvariants/admin_publication_list.html:
{% extends \'admin/change_list.html\' %}\n\n{% block object-tools %}\n <li>\n <a href="/admin/variants/publication/update/">\n Update\n </a>\n </li>\n {{ block.super }}\n{% endblock %}\nRun Code Online (Sandbox Code Playgroud)\n\n但是,当我按下按钮时,我只会收到通知:
\n\n\n\nID 为 \xe2\x80\x9cupdate\xe2\x80\x9d 的发布不存在\xe2\x80\x99。也许它被删除了?
\n
方法名称update或路由名称update太通用,有时会被框架自动使用,请尝试命名它以匹配您的功能。revoke-publications或者sync-publications。
admin.py:
from django.contrib import admin
from django.urls import path
from django.http import HttpResponseRedirect
from .models import Publication
from .tasks import your_celery_task
@admin.register(Publication)
class PublicationAdmin(admin.ModelAdmin):
change_list_template = "variants/admin_publication_list.html"
def get_urls(self):
urls = super().get_urls()
my_urls = [
path('update-publications/', self.publication_update),
]
return my_urls + urls
def publication_update(self, request):
result = your_celery_task.delay("some_arg")
self.message_user(
request,
f"Task with the ID: {result.task_id} was added to queue. Last known status: {result.status}"
)
return HttpResponseRedirect("../")
Run Code Online (Sandbox Code Playgroud)
variants/admin_publication_list.html:
{% extends 'admin/change_list.html' %}
{% block object-tools %}
<div>
<form action="update-publications/" method="POST">
{% csrf_token %}
<button type="submit">Run Celery Task</button>
</form>
</div>
<br />
{{ block.super }}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3198 次 |
| 最近记录: |