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

uma*_*mat 3 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')
Run Code Online (Sandbox Code Playgroud)

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

Document with ID "my-view" doesn't exist. Perhaps it was deleted?
Run Code Online (Sandbox Code Playgroud)

所以看起来 django 看不到我的自定义网址。我错过了什么?我怎样才能让它发挥作用?

Dan*_*man 6

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

return custom_urls + urls
Run Code Online (Sandbox Code Playgroud)