当前位置: 首页 > article >正文

11、Django Admin启用对计算字段的过滤

重新定义admin.py中的Hero管理模型如下:

@admin.register(Hero)
class HeroAdmin(admin.ModelAdmin):
    list_display = ("name", "is_immortal", "category", "origin", "is_very_benevolent")
    list_filter = ("is_immortal", "category", "origin",)
    def is_very_benevolent(self, obj):
        return obj.benevolence_factor > 75

它具有一个计算字段is_very_benevolent,Admin后台显示如下:

我们已经在来自模型属性字段上添加了过滤,但是还想在计算出的字段上添加过滤。为此,我们可以通过继承SimpleListFilter类实现:

class IsVeryBenevolentFilter(admin.SimpleListFilter):
    title = 'is_very_benevolent'
    parameter_name = 'is_very_benevolent'
    def lookups(self, request, model_admin):
        return (
            ('Yes', 'Yes'),
            ('No', 'No'),
        )
    def queryset(self, request, queryset):
        value = self.value()
        if value == 'Yes':
            return queryset.filter(benevolence_factor__gt=75)
        elif value == 'No':
            return queryset.exclude(benevolence_factor__gt=75)
        return queryset

然后将更改list_filter为list_filter = ("is_immortal", "category", "origin", IsVeryBenevolentFilter)

这样,便可以对计算出的字段进行过滤。修改后管理后台显示如下:

如何对计算字段修改成系统自带的布尔类型显示效果,增加is_very_benevolent.boolean = True代码,HeroAdmin管理模型修改如下:

@admin.register(Hero)
class HeroAdmin(admin.ModelAdmin):
    list_display = ("name", "is_immortal", "category", "origin", "is_very_benevolent")
    list_filter = ("is_immortal", "category", "origin", IsVeryBenevolentFilter)
    def is_very_benevolent(self, obj):
        return obj.benevolence_factor > 75
    is_very_benevolent.boolean = True

显示效果如下:


http://www.kler.cn/a/293141.html

相关文章:

  • change buffer:到底应该选择普通索引还是唯一索引
  • 从华为到创业公司
  • C++ 编程基础(6)作用域 | 6.3、类作用域
  • 封装一个省市区的筛选组件
  • Flink1.19编译并Standalone模式本地运行
  • Spring Boot中的自动装配机制
  • 大数据-111 Flink 安装部署 YARN部署模式 FlinkYARN模式申请资源、提交任务
  • Java反射机制讲解
  • C++set与map容器
  • 10Python的Pandas:样式Style
  • 数据访问:JPA
  • Django ORM - 如何单独使用 Django 数据库
  • AutosarMCAL开发——基于EB Gpt驱动
  • 【王树森】BERT:预训练Transformer模型(个人向笔记)
  • 2024 年高教社杯全国大学生数学建模竞赛题目-C 题 农作物的种植策略
  • 【Cesium实体创建】
  • HTML:charset讲解
  • Elasticsearch 再次开源
  • 开源云原生数据库PolarDB PostgreSQL 15兼容版本正式发布
  • 计算机视觉中,什么是上下文信息(contextual information)?
  • uuid uuid uuid
  • SpringBoot总结
  • 理解 Axios、jQuery Ajax 和 Fetch 的差别
  • C/C++内存详解
  • Qt/QML学习-Tumbler
  • 电商创新:基于亚马逊国际商品详情API返回值的策略