Django ModelAdmin.get_urls()未注册自定义网址

时间:2018-09-03 06:10:26

标签: django django-admin

我正在尝试在Django管理站点中为我的模型创建自定义视图。我为名为ModelAdmin的模型创建了Document,如下所示:

from django.http import HttpResponse
from django.urls import path
from django.contrib import admin
from my_app.models import Document


@admin.register(Document)
class DocumentAdmin(admin.ModelAdmin):
    def get_urls(self):
        urls = super().get_urls()
        custom_urls = [
            path('my-view/', self.admin_site.admin_view(self.my_view))
        ]

        return urls + custom_urls

    def my_view(self, request):
        return HttpResponse('test')

根据the docs(v2.1),我应该能够使用my_view访问/admin/my_app/document/my-view,但是当我尝试访问该URL时,django将我重定向到管理主页,并显示以下警告:

Document with ID "my-view" doesn't exist. Perhaps it was deleted?

因此django似乎看不到我的自定义网址。我想念什么?我该如何使用它?

1 个答案:

答案 0 :(得分:2)

这只是URL排序的问题;通用管理员更改视图将首先处理,并且正在捕获您对“我的视图”的请求。您可以通过将URL放在第一位来更改此设置,这是您链接到的示例中实际完成的操作:

return custom_urls + urls