Django中自定义管理Xadmin的实现

  介绍

本篇文章为大家展示了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> 得到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>

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的实现