【问题标题】:How to override Django admin's views?如何覆盖 Django 管理员的视图?
【发布时间】:2012-09-07 15:29:34
【问题描述】:

我想给默认的Django admin添加一个上传按钮,如下图:

为此,我覆盖了 admin/index.html 模板以添加按钮,但如何覆盖管理视图以处理它?

我想要实现的是在文件上传后显示成功消息或错误消息。

【问题讨论】:

标签: django admin


【解决方案1】:

索引视图位于AdminSite 实例上。要覆盖它,您必须创建一个自定义 AdminSite 子类(即不再使用 django.contrib.admin.site):

from django.contrib.admin import AdminSite
from django.views.decorators.cache import never_cache

class MyAdminSite(AdminSite):
    @never_cache
    def index(self, request, extra_context=None):
        # do stuff

您可能需要在以下位置引用原始方法:https://github.com/django/django/blob/1.4.1/django/contrib/admin/sites.py

然后,您创建这个类的一个实例,并使用这个实例,而不是 admin.site 来注册您的模型。

admin_site = MyAdminSite()

然后,稍后:

from somewhere import admin_site

class MyModelAdmin(ModelAdmin):
    ...

admin_site.register(MyModel, MyModelAdmin)

您可以在以下位置找到更多详细信息和示例:https://docs.djangoproject.com/en/dev/ref/contrib/admin/#adminsite-objects

【讨论】:

  • 好的,谢谢。有没有其他方法可以实现这一目标?例如通过创建一个新模块(类似于侧边栏)?
  • 侧边栏本身由通过索引视图添加的上下文填充。添加更多上下文的唯一方法是覆盖索引视图,而这样做的唯一方法是子类化AdminSite
  • 您是否建议在单独的应用程序中执行此操作?
  • 这也是在'Add''Change'之间添加另一个链接的方法,可以找到型号名称吗?我打算连同这个一起添加一个链接'View only'。谢谢
  • @Chris。我的项目中有这么多模型。我需要将所有模型注册到这个新管理员吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-02
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
  • 2016-09-04
  • 2019-07-09
  • 1970-01-01
相关资源
最近更新 更多