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设置应用程序及模型顺序方法详解 的全部内容, 来源链接: utcz.com/z/332308.html

回到顶部