Django Admin Cookbook-9如何启用对计算字段的排序

摘要:
通常,Django会自动为模型属性字段添加排序功能。当您添加一个计算字段时,Django不知道如何执行order_By,因此它不会向该字段添加排序。上一章(如何在Djangoadmin中优化查询?

9.如何启用对计算字段的排序?

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

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

我们从上一章(如何在Django admin中优化查询?)编写的Admin后台开始:

hero_count.admin_order_field = '_hero_count'
villain_count.admin_order_field = '_villain_count'

修改如下:

@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'

以下是Admin后台按hero_count排序的结果:

Django Admin Cookbook-9如何启用对计算字段的排序第1张

返回目录

免责声明:文章转载自《Django Admin Cookbook-9如何启用对计算字段的排序》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇DRF--视图集[Shader]Unity裁剪四方形Image为圆形下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python字典实现按照自定义顺序排序

还是对于python字典理解不透彻,试图通过sort来给python的key指定顺序,几经试验,仍然得不到想要的效果,后来一想,python的字典不是本来就无序的么? 老王python的文章里这样写:(链接http://www.cnpythoner.com/post/62.html) 如果把python列表做为一种有序的对象集合类型的话,那python字典...

django:开发一个下载图片的接口

html页面如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form a...

SQL注入实例猜密码

sql注入实例分析 什么是SQL注入攻击?引用百度百科的解释: sql注入_百度百科: 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个...

Django model update的各种用法介绍

Django开发过程中对表(model)的增删改查是最常用的功能之一,本文介绍笔者在使用model update过程中遇到的那些事 model update常规用法 假如我们的表结构是这样的 class User(models.Model): username = models.CharField(max_length=255, unique=Tr...

[集合操作]List对象数组获取元素值非空对象及根据对象元素值排序取最大&amp;amp;取对象数组的对象元素集合&amp;amp;条件去重&amp;amp;条件分组

如果有个List如下图所示,我需要把这个List先把 url 为空的过滤,然后根据id分组,取date字段最大的对象,形成新的集合 List data = [ {"date":"2018-10-12", id:"1",url:"hdjf"}, {"date":"2018-10-13", id:"1",url:"hdjf"}, {"date":...

Python的Django框架

一、Django简介 Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。 Django 是一个开放源代码的 Web 应用框架,由 Python 写成。 Django 遵守 BSD 版权,初次发布于 2005 年 7 月, 并于 2008 年 9 月发布了第一个正式版本 1.0...