admin.register与 admin.site.register的区别
我在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.register 是 admin.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文档中有相关的使用示例。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。