自定制Admin
如果只是在admin中简单的展示及管理模型,那么在admin.py模块中使用admin.site.register将模型注册一下就好了:
from django.contrib import admin
from myproject.myapp.models import Author
admin.site.register(Author)
ModelAdmin类是一个模型在admin页面里的展示方法,如果你对默认的admin页面满意,那么你完全不需要定义这个类,直接使用最原始的样子也行。通常,它们保存在app的admin.py文件里。下面是个简单的例子:
from django.contrib import admin
from myproject.myapp.models import Author
# 创建一个ModelAdmin的子类
class AuthorAdmin(admin.ModelAdmin):
pass
# 注册的时候,将原模型和ModelAdmin耦合起来
admin.site.register(Author, AuthorAdmin)
注册装饰器
除了常用的admin.site.register(Author, AuthorAdmin)方式进行注册,还可以用装饰器的方式连接模型和ModelAdmin。如下所示:
from django.contrib import admin
from .models import Author
@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
pass
这个装饰器可以接收一些模型类作为参数,以及一个可选的关键字参数site(如果你使用的不是默认的AdminSite),比如。
from django.contrib import admin
from .models import Author, Reader, Editor
from myproject.admin_site import custom_admin_site
@admin.register(Author, Reader, Editor, site=custom_admin_site)
class PersonAdmin(admin.ModelAdmin):
pass
注册位置
当你在INSTALLED_APPS设置中添加了django.contrib.admin后,Django将自动在每个应用中搜索admin模块并导入它。也就是说,通常我们在每个app下都有一个admin.py文件,将当前app和admin有关的内容写到内部的admin.py文件中就可以了,Django会自动搜索并应用它们。
ModelAdmin的属性
ModelAdmin非常灵活,它有许多内置属性,帮助我们自定义admin的界面和功能。所有的属性都定义在ModelAdmin的子类中,如下方式:
- ModelAdmin.date_hierarchy 根据你指定的日期相关的字段,为页面创建一个时间导航栏,可通过日期过滤对象。例如:
from django.contrib import admin
class AuthorAdmin(admin.ModelAdmin):
date_hierarchy = 'pub_date'