首页 > 解决方案 > 在 django 中,是否可以在不使用原始 SQL 的情况下使用函数(不能用查询表达式编写)对管理页面进行排序?

问题描述

我有这个管理页面类:

class UserAdmin(admin.ModelAdmin):
    levelfunc = lambda usr: dox_user(usr).rank.level

    list_display = ('name', levelfunc)

我的最终目标是能够使用 levelfunc 列对管理页面进行排序,遗憾的是 django 不允许这样做。

我尝试了很多谷歌搜索,大多数时候它说要使用在这种情况下我不能使用的查询表达式,因为返回用户数据的 dox_user 函数无法简化为 SQL 表达式,我无法将 dox_user 函数移动到其他任何地方,因为如果我这样做,我将需要重写很多代码。

是否有一种简单的方法可以按用户级别对其进行排序?

标签: pythondjangodjango-models

解决方案


您可能可以ordering在元选项中使用(https://docs.djangoproject.com/en/3.1/ref/models/options/#orderingget_queryset(..) ),否则您可以在 UserAdmin 上编写方法( https://docs .djangoproject.com/en/3.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_queryset)。


推荐阅读