添加自定义Django管理操作
我想找一些方法,在Django的管理后台的修改页面上添加自定义操作。我不是想在概览中的下拉框里添加操作。
我在Django应用中有一个模型,它包含关于文档的信息,这些文档会在前端自动生成PDF文件。我希望能给管理员一个选项,让他们可以直接从修改页面快速生成PDF,这样就能快速查看结果。
我已经尝试过覆盖change_form.html和submit_line.html,添加一个按钮完全没问题。但我在想,怎样才能以一种干净的方式扩展管理模块,让它包含我的自定义操作呢?
1 个回答
5
因为自定义的管理视图基本上就是普通的视图,所以没有太多特别的地方。这里有几点建议,可以让你的集成更干净一些:
- 通过 get_urls() 方法在
AdminSite
中添加网址模式。 - 在渲染一个继承自管理模板的模板时,给
RequestContext
或Context
提供current_app
参数。
编辑:
这里有一个例子: http://shrenikp.webs.com/apps/blog/show/5211522-add-custom-view-method-for-django-admin-model-
注意,这个例子没有使用我提到的 current_app
参数。我猜你的视图生成 PDF 的时候只是返回一个 HttpResponse
,并且带有合适的内容类型,而不是用 Context
渲染响应,所以这个参数就不需要了。总的来说,current_app
只有在你继承了一个管理模板并且你的自定义视图在某处实际使用了这个参数时才有意义。
这个例子把网址和视图封装在一个 ModelAdmin
中。你也可以通过一个 AdminSite
的子类来做到这一点,但在你的使用场景中,这可能有点多余。
顺便说一下,覆盖你应用的 change_form.html
模板,为标准的更改视图添加一个按钮是完全可以的。管理界面中没有特别的 API 来处理这个(很遗憾)。