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'

显示效果:

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

相关推荐
i220818 Faiz Ul3 小时前
计算机毕业设计|基于springboot + vue鲜花商城系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
哈里谢顿3 小时前
Django 应用 OOM(Out of Memory)故障的定位思路和排查方法
python·django
不能放弃治疗3 小时前
聊聊大模型开发的发展历程
后端
甄心爱学习4 小时前
【python】获取所有长度为 k 的二进制字符串
python·算法
福大大架构师每日一题4 小时前
go-zero v1.10.0发布!全面支持Go 1.23、MCP SDK迁移、性能与稳定性双提升
开发语言·后端·golang
学习是生活的调味剂4 小时前
spring bean循环依赖问题分析
java·后端·spring
期待のcode4 小时前
SpringBoot连接Redis
spring boot·redis·后端
tuotali20264 小时前
氢气压缩机技术规范亲测案例分享
人工智能·python
嫂子的姐夫5 小时前
030-扣代码:湖北图书馆登录
爬虫·python·逆向
a1117765 小时前
EasyVtuber(或其衍生/增强版本)的虚拟主播(Vtuber)面部动画生成与直播解决方案
python·虚拟主播