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

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

python 复制代码
@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类实现:

python 复制代码
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管理模型修改如下:

python 复制代码
@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

显示效果如下:

相关推荐
程序员爱钓鱼5 分钟前
Python编程实战 | 函数与模块化编程 - 第三方库的安装与管理(pip使用)
后端·python·ipython
国服第二切图仔5 分钟前
Rust开发之Result枚举与?运算符简化错误传播
开发语言·python·rust
程序员爱钓鱼7 分钟前
Python编程实战 | 面向对象与进阶语法-类与对象的概念
后端·python·ipython
人类二号7 分钟前
MySQL安装及启用(社区版)
数据库·mysql
IT学长编程30 分钟前
计算机毕业设计 基于Python的电商用户行为分析系统 Django 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】
大数据·hadoop·python·django·毕业设计·课程设计·电商用户行为分析系统
StarRocks_labs39 分钟前
告别 Hadoop,拥抱 StarRocks!政采云数据平台升级之路
大数据·数据库·starrocks·hadoop·存算分离
国服第二切图仔1 小时前
Rust开发之自定义错误类型(实现Error trait)
开发语言·python·rust
Geoking.1 小时前
PyTorch 中 Tensor 交换维度(transpose、permute、view)详解
人工智能·pytorch·python
咚咚王者1 小时前
人工智能之编程基础 Python 入门:第四章 条件循环与异常
人工智能·python
骇客野人7 小时前
mysql笛卡尔积怎么形成的怎么避免笛卡尔积
数据库·mysql