在每个app下的admin.py文件中进行注册:
from app名.models import 模型类名
from django.contrib import admin
admin.site.register(模型类名)
class 自定义配置类名(admin.ModelAdmin):
list_display = ["字段名1","字段名1"]
admin.site.register(模型类名,自定义配置类名)
一、启动
django启动后,会加载settings中的INSTALLED_APPS
from django.contrib import admin
在__init.py中:
from django.contrib.admin.sites import AdminSite, site // 导入模块的实例化对象,此为单例模式
from django.utils.module_loading import autodiscover_modules
def autodiscover():
autodiscover_modules('admin', register_to=site) //加载每一个app下的admin.py文件
# 优先执行哪个app下的admin.py 是由settings中的INSTALLED_APPS的加载顺序决定的
二、注册
admin.site.register(Author)
class BookConfig(admin.ModelAdmin):
pass
admin.site.register(Book,BookConfig)
admin.py---sites.py中:
class AdminSite(object):
def __init__(self):
self._registry = {}
def register(self,model,admin_class=None):
if not admin_class:
admin_class = ModelAdmin
self._registry[model] = admin_class(model, self)
site = AdminSite()
admin.site._registry --> {
<class 'django.contrib.auth.models.Group'>:<django.contrib.auth.admin.GroupAdmin object at 0x0000000003E70DD8>,
<class 'django.contrib.auth.models.User'>:<django.contrib.auth.admin.UserAdmin object at 0x0000000003E9DCC0>,
<class 'app01.models.Author'>:ModelAdmin(Author),
<class 'app01.models.AuthorDetail'>:ModelAdmin(AuthorDetail),
<class 'app01.models.Book'>: BookConfig(Book),
<class 'app01.models.Publish'>:PublishConfig(Publish),
}
在app下admin.py文件中注册,admin.site._registry中才会有此键值对。
三、设计url
##### 一级url分发 #####
urlpatterns = [
url(r"^my_admin/",([
url(r"^book/",app01_views.list_book),
url(r"^publish/",app01_views.list_publish),
url(r"^food/",app02_views.list_food),
],None,None))
]
##### 二级url分发 #####
urlpatterns = [
url(r"^my_admin/",([
url(r"^book/",([
url(r"^$",app01_views.list_book),
url(r"^add/$",app01_views.add_book),
url(r"^(\d+)/change/$",app01_views.edit_book),
url(r"^(\d+)/delete/$",app01_views.del_book),
],None,None)),
url(r"^publish/",app01_views.list_publish),
url(r"^food/",app02_views.list_food),
],None,None))
]
在urls.py中:
from django.conf.urls import url
from django.contrib import admin
from django.shortcuts import HttpResponse
def listview(request):
return HttpResponse("listview")
def addview(request):
return HttpResponse("addview")
def changeview(request,id):
return HttpResponse("changeview")
def deleteview(request,id):
return HttpResponse("deleteview")
def get_urls_02():
res = [
url(r"^$",listview),
url(r"^add/$",addview),
url(r"^(\d+)/change/$",changeview),
url(r"^(\d+)/delete/$",deleteview),
]
return res
def get_urls_01():
res = []
print("urls.py文件中admin.site._registry -->",admin.site._registry)
"""
urls.py文件中admin.site._registry --> {
<class 'django.contrib.auth.models.Group'>: <django.contrib.auth.admin.GroupAdmin object at 0x0000000003E70E10>,
<class 'django.contrib.auth.models.User'>: <django.contrib.auth.admin.UserAdmin object at 0x0000000003E9DCF8>,
<class 'app01.models.Author'>: <django.contrib.admin.options.ModelAdmin object at 0x0000000003EB0940>,
<class 'app01.models.AuthorDetail'>: <django.contrib.admin.options.ModelAdmin object at 0x0000000003EB0978>,
<class 'app01.models.Book'>: <app01.admin.BookConfig object at 0x0000000003EB09B0>,
<class 'app01.models.Publish'>: <app01.admin.PublishConfig object at 0x0000000003EB09E8>,
<class 'app02.models.Food'>: <django.contrib.admin.options.ModelAdmin object at 0x0000000003EB07F0>
}
"""
for model,config_obj in admin.site._registry.items():
print("模型类变量model-->",model)
print("配置类对象config_obj-->",config_obj)
model_name = model._meta.model_name # 获取字符串形式的模型类名
app_label = model._meta.app_label # 获取字符串形式的app名
print("model_name-->{},type(model_name)-->{}".format(model_name,type(model_name)))
print("app_label-->{},type(model_name)-->{}".format(app_label,type(app_label)))
"""
模型类变量model--> <class 'django.contrib.auth.models.Group'>
配置类对象config_obj--> auth.GroupAdmin
model_name-->group,type(model_name)--><class 'str'>
app_label-->auth,type(model_name)--><class 'str'>
模型类变量model--> <class 'django.contrib.auth.models.User'>
配置类对象config_obj--> auth.UserAdmin
model_name-->user,type(model_name)--><class 'str'>
app_label-->auth,type(model_name)--><class 'str'>
模型类变量model--> <class 'app01.models.Author'>
配置类对象config_obj--> app01.ModelAdmin
model_name-->author,type(model_name)--><class 'str'>
app_label-->app01,type(model_name)--><class 'str'>
模型类变量model--> <class 'app01.models.AuthorDetail'>
配置类对象config_obj--> app01.ModelAdmin
model_name-->authordetail,type(model_name)--><class 'str'>
app_label-->app01,type(model_name)--><class 'str'>
模型类变量model--> <class 'app01.models.Book'>
配置类对象config_obj--> app01.BookConfig
model_name-->book,type(model_name)--><class 'str'>
app_label-->app01,type(model_name)--><class 'str'>
模型类变量model--> <class 'app01.models.Publish'>
配置类对象config_obj--> app01.PublishConfig
model_name-->publish,type(model_name)--><class 'str'>
app_label-->app01,type(model_name)--><class 'str'>
模型类变量model--> <class 'app02.models.Food'>
配置类对象config_obj--> app02.ModelAdmin
model_name-->food,type(model_name)--><class 'str'>
app_label-->app02,type(model_name)--><class 'str'>
"""
add_url = url(r"^{}/{}/".format(app_label,model_name),(get_urls_02(),None,None))
res.append(add_url)
return res
urlpatterns = [
url(r"^my_admin/",(get_urls_01(),None,None)),
]