1. 程式人生 > 程式設計 >Django Admin設定應用程式及模型順序方法詳解

Django Admin設定應用程式及模型順序方法詳解

Django預設情況下,按字母順序對模型進行排序。因此,Event應用模型的順序為Epic、EventHero、EventVillain、Event

假設你希望順序是

EventHero、EventVillain、Epic、Event。

用於呈現後臺indxe頁面的模板為admin/index.html,對應的檢視函式為 ModelAdmin.index。

def index(self,request,extra_context=None):
  """
  Display the main admin index page,which lists all of the installed
  apps that have been registered in this site.
  """
  app_list = self.get_app_list(request)
  context = {
    **self.each_context(request),'title': self.index_title,'app_list': app_list,**(extra_context or {}),}
  request.current_app = self.name
  return TemplateResponse(request,self.index_template or
    'admin/index.html',context)

預設的get_app_list方法用於設定模型的順序。

def get_app_list(self,request):
  """
  Return a sorted list of all the installed apps that have been
  registered in this site.
  """
  app_dict = self._build_app_dict(request)

  # Sort the apps alphabetically.
  app_list = sorted(app_dict.values(),key=lambda x: x['name'].lower())

  # Sort the models alphabetically within each app.
  for app in app_list:
    app['models'].sort(key=lambda x: x['name'])
  return app_list

因此,可以通過覆蓋get_app_list方法來修改顯示順序:

class EventAdminSite(AdminSite):
  def get_app_list(self,request):
    """
    Return a sorted list of all the installed apps that have been
    registered in this site.
    """
    ordering = {
      "Event heros": 1,"Event villains": 2,"Epics": 3,"Events": 4
    }
    app_dict = self._build_app_dict(request)
    # a.sort(key=lambda x: b.index(x[0]))
    # Sort the apps alphabetically.
    app_list = sorted(app_dict.values(),key=lambda x: x['name'].lower())
    # Sort the models alphabetically within each app.
    for app in app_list:
      app['models'].sort(key=lambda x: ordering[x['name']])
    return app_list

以上程式碼app['models'].sort(key=lambda x: ordering[x['name']])用來設定預設順序。修改後效果如下。

Django Admin設定應用程式及模型順序方法詳解

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。