admin.register与 admin.site.register的区别

后端开发 2026-07-09

我在Django中编写一个API,并在Django Admin的一个视图中展示它的指标。我的Django项目有不止一个应用,在其中一个应用里有一个视图,用来为指标模板提供信息。

我使用了:

from django.contrib import admin
...
admin.register(ApiRequestLog, ApiRequestLogAdmin)

其中 ApiRequestLog 是一个用于记录每次请求的用户、时间等信息的模型。

但该端点并未出现在 uv run manage.py show_urls,也无法在其他模板中链接到它:我的 index.html 有一个指向它的按钮,因找不到反向URL而崩溃。

然后我改成了 admin.site.register(ApiRequestLog, ApiRequestLogAdmin),就能工作。据网上所查,admin.registeradmin.site.register 的别名。我应该继续使用 admin.site.register 还是用更短的写法?

解决方案

admin.register是一个装饰器。很可能你把它当成函数来调用了,这也是为什么admin.site.register能用(它确实是一个函数!)。建议使用admin.register。Django官方文档给出这个示例:

from django.contrib import admin
from .models import Author, Editor, Reader
from myproject.admin_site import custom_admin_site


@admin.register(Author, Reader, Editor, site=custom_admin_site)
class PersonAdmin(admin.ModelAdmin):
    pass

如果你需要更多信息,Django文档中有相关的使用示例。

https://docs.djangoproject.com/en/6.0/ref/contrib/admin/

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章