Django Admin設定應用程式及模型順序方法詳解
阿新 • • 發佈:2020-04-02
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']])用來設定預設順序。修改後效果如下。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。