python - 在 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 函数移动到其他任何地方,因为如果我这样做,我将需要重写很多代码。
是否有一种简单的方法可以按用户级别对其进行排序?
解决方案
您可能可以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)。
推荐阅读
- javascript - 在Javascript中,有没有一种多态设置器的方法
- visual-studio - Visual Studio 从另一个文件打开类的文件
- sql - 我有两列,我想将两者结合起来,而不是通过 concat 仅结合另一行下方的一行
- python - 使用 sqlalchemy 查询远程数据库后 SSHTunnelForwarder 未结束
- node.js - 如何从客户端向服务器发出异步请求?
- vue.js - 将集合复制出 vuex 状态以防止突变是标准的吗?
- javascript - 为什么 FormData 使用 fetch API 会导致我的屏幕刷新?
- azure-information-protection - 在服务/守护程序应用程序中使用 MIP SDK 保护文件时出错
- python - 从 tkinter 子窗口获取变量
- python - 颠簸版本和同时构建?