4、Django Admin对自定义的计算字段进行排序

通常,Django会为模型属性字段,自动添加排序功能。当你添加计算字段时,Django不知道如何执行order_by,因此它不会在该字段上添加排序功能。

如果要在计算字段上添加排序,则必须告诉Django需要排序的内容。你可以通过在在计算字段方法中设置admin_order_field属性来执行此操作 。

以OriginAdmin为例,添加以下代码

python 复制代码
hero_count.admin_order_field = '_hero_count'
villain_count.admin_order_field = '_villain_count'

完整代码如下:

python 复制代码
@admin.register(Origin)
class OriginAdmin(admin.ModelAdmin):
    list_display = ("name", "hero_count", "villain_count")

    def get_queryset(self, request):
        queryset = super().get_queryset(request)
        queryset = queryset.annotate(
            _hero_count=Count("hero", distinct=True),
            _villain_count=Count("villain", distinct=True),
        )
        return queryset
    def hero_count(self, obj):
        return obj._hero_count
    def villain_count(self, obj):
        return obj._villain_count
    hero_count.admin_order_field = '_hero_count'
    villain_count.admin_order_field = '_villain_count'

显示效果:

后,点击抬头标签,显示字段排序

相关推荐
星星电灯猴2 分钟前
iOS App安全实战:借助Ipa Guard提升应用抗逆向能力的开发者实用指南
后端
林鹿8 分钟前
Dart: 串联多个数据流
后端·架构·dart
咖啡配辣条20 分钟前
Python基础09
python
超大力王22 分钟前
DAY 45 超大力王爱学Python
开发语言·python
林-梦璃23 分钟前
Python开发基础手语识别(基础框架版)
开发语言·python·手语识别
Java水解28 分钟前
MySQL 分页查询优化
后端·mysql
想用offer打牌1 小时前
面试官拷打我线程池,我这样回答😗
java·后端·面试
RockyRich1 小时前
突然无法调用scikit-learn、xgboost
python·机器学习·scikit-learn
真的很上进1 小时前
2025最全TS手写题之partial/Omit/Pick/Exclude/Readonly/Required
java·前端·vue.js·python·算法·react·html5
用户6945295521701 小时前
国内开源版“Manus”——AiPy实测:让你的工作生活走上“智动”化
前端·后端