当前位置: 首页 > 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/news/293141.html

相关文章:

  • 大数据-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返回值的策略
  • 数学基础 -- 线性代数之LU分解
  • DCaaS:数据中心解决方案的经济高效选择
  • 【60天备战软考高级系统架构设计师——第三天:软件工程原则与常用方法】
  • python恶搞无限弹窗脚本
  • 监理工程师职业资格考试
  • 读书笔记:《深入理解Java虚拟机》(6)
  • AcWing算法基础课-786第k个数-Java题解
  • Large Language Models(LLMs) Concepts
  • 状压DP
  • docker容器命令汇总(全)