本篇文章为大家展示了Django中自定义管理Xadmin的实现,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
<强> 1,启动强>
我们可以通过<代码>从Django。contrib进口管理> 代码来看管理是如何启动的
Django启动后,会在jobs文件中加载配置文件settings.py ,在settings.py中有一个INSTALLED_APPS这个配置项,Django会按照配置项的内容一次加载每一个应用程序。
#, Application 定义 INSTALLED_APPS =, ( ,& # 39;django.contrib.admin& # 39; ,& # 39;django.contrib.auth& # 39; ,& # 39;django.contrib.contenttypes& # 39; ,& # 39;django.contrib.sessions& # 39; ,& # 39;django.contrib.messages& # 39; ,& # 39;django.contrib.staticfiles& # 39; ,& # 39;Xadmin.apps.XadminConfig& # 39; ,& # 39;blogs.apps.BlogsConfig& # 39; ,& # 39;bigs.apps.BigsConfig& # 39; )
加载到<代码> django.contrib.admin> 代码时,会加载管理相关的,我们点击管理,进入管理的__init__。py文件,
得到django.contrib.admin.sites import AdminSite,网站 得到django.utils.module_loading import  autodiscover_modules def autodiscover (): ,autodiscover_modules(& # 39;行政与# 39;,,register_to=网站)
执行auto_discover这个接口,会自动的加载所中有应用的<代码> admin.py 代码>这个文件,这就是管理员的启动文件
<强> 2,注册强>
自动加载所有应用下的admin.py文件时,会一次记录所有执行了admin.site.register(模型类)这个方法的模型类,从而完成模型类的注册。
所有的模型类都执行<代码> admin.site.register() 代码>这个方法后完成的注册,那么这个方法内部都做了些什么?
我们可以点击网站进入管理的源码中,得到这个:网站=AdminSite (),网站是一个对象,是AdminSite这个类的一个对象,并且是一个单例对象,那么我们就可以肯定,注册是这个单例对象的一个方法,那这个方法中到底做了什么?
class AdminSite(对象): ,“““ ,An AdminSite  object encapsulates  An instance of 从而Django admin 应用程序,准备好了 ,用be hooked 用拷贝your URLconf只Models 断开连接;registered with 从而AdminSite using ,注册()方法,以及从而get_urls (), method 还要then be used 用access Django 视图 阐述,functions that ; a  full admin interface for 从而collection of 注册 模型。 ,“““ ,def __init__(自我,,name=& # 39;行政与# 39;):=,self._registry , {}, #, model_class class →admin_class 实例 self.name =,名称 ,#关于注册的方法 ,def 注册(model_or_iterable,自我,还以为;admin_class=,, * *选项): ,if not  admin_class: admin_class 才能=ModelAdmin ,# Instantiate 从而admin class 用节省;拷贝,注册表 ,self._registry(模型),=,admin_class(自我)模型,, ,#备注:截取的源码中的一部分
示例站点对象时,会生成一个<代码>自我。_registry={} 代码>这个对象属性,如果我们没有指定admin_class,那么admin_class就是ModelAdmin,由此可以看的出,<代码> admin_class> 代码是管理提供给我们定制页面的一个自定义类,这个类必须继承ModelAdmin这个类,以下是:
class ModelAdmin (BaseModelAdmin): ,“Encapsulates  all admin  options 以及functionality for a given 模型!” ,list_display =, (& # 39; __str__& # 39;,) ,list_display_links =, () ,list_filter =, () ,list_select_related =False list_per_page =, 100 list_max_show_all =, 200 ,list_editable =, () ,search_fields =, ()=,date_hierarchy 没有 ,save_as =False save_as_continue =, True ,save_on_top =False=,paginator  Paginator preserve_filters =, True=,inlines [] ,# Custom templates (designed 用be over-ridden 拷贝子类)=,add_form_template 没有=,change_form_template 没有=,change_list_template 没有=,delete_confirmation_template 没有=,delete_selected_confirmation_template 没有=,object_history_template 没有=,popup_response_template 没有 ,#行动=,actions []=,action_form  helpers.ActionForm actions_on_top =, True ,actions_on_bottom =False actions_selection_counter =, True=,checks_class  ModelAdminChecks ,def __init__(自我、,模型,admin_site): self.model =,模型=,self.opts  model._meta=,self.admin_site  admin_site ,超级(ModelAdmin,,自我). __init__ () ,def __str__(自我): ,return “% s % s", %, (self.model._meta.app_label, self.__class__.__name__)Django中自定义管理Xadmin的实现