添加自定义 Django 管理操作

Posted

技术标签:

【中文标题】添加自定义 Django 管理操作【英文标题】:Add custom Django admin action 【发布时间】:2013-01-26 12:21:14 【问题描述】:

我正在寻找向 Django 管理员更改页面添加自定义操作的方法。我不是在寻找可以添加到概览下拉框中的操作。

我的 Django 应用程序中的一个模型包含有关文档的信息,这些信息会在前端自动编译为 PDF 文件。我想让管理员可以直接从更改页面快速呈现 PDF,以便能够快速检查结果。

我已经玩过覆盖change_form.html/submit_line.html,添加按钮绝对没问题。但我想知道如何以一种干净的方式扩展管理模块,以便它包含我的自定义操作。

【问题讨论】:

【参考方案1】:

由于自定义管理视图基本上只是普通视图,因此没有太多特色。为了实现更简洁的集成,您应该考虑以下几点:

通过get_urls() 的AdminSite 添加url 模式。 在呈现作为管理模板子类的模板时,将current_app 参数提供给RequestContextContext

编辑

在这里找到了一个例子: http://shrenikp.webs.com/apps/blog/show/5211522-add-custom-view-method-for-django-admin-model-

请注意,该示例没有使用我提到的current_app 参数。我想您生成 PDF 的视图只返回具有适当内容类型的 HttpResponse,而不是使用 Context 呈现响应,因此不需要。总而言之,current_app 仅在您将自定义视图使用的管理模板子类化时才有意义,该模板实际上在某处使用了current_app

该示例将 url 和视图封装在 ModelAdmin 中。也可以通过 AdminSite 子类来做到这一点,但至少在您的用例中,这可能是矫枉过正。

顺便说一句,为您的应用覆盖change_form.html 模板以向标准更改视图添加一个按钮就可以了。管理员中没有专门的 api(很遗憾)。

【讨论】:

谢谢,但我想我只是没有足够的经验来利用你的答案。网络上是否有任何示例?

以上是关于添加自定义 Django 管理操作的主要内容,如果未能解决你的问题,请参考以下文章

您可以将参数添加到 Django 自定义管理操作吗?

在 django 中测试自定义管理操作

在 django 中覆盖管理模板以添加自定义 javascript

Django admin:如何在单击自定义按钮时调用操作?

Django 自定义管理操作:如何在完成时取消选择?

Django 管理员添加自定义过滤器