Django在fitler过滤不等于的条件

提问

django 在API接口fitler的时候如何过滤 category 不等于6的

解答

为了在AoYuStudentFilter中设置过滤category不等于6的条件,需要使用django_filters库中的exclude方法。不过直接在FilterSet中使用exclude可能不那么直观,因为FilterSet主要设计用来包含符合条件的结果,而不是排除它们。可以通过定义自定义过滤方法来实现这一点。

已经安装了django_filters库并正确配置了Django项目以使用它。

可以通过以下方式在你的FilterSet类中添加一个自定义方法来实现category不等于6的过滤:

python 复制代码
from django_filters import rest_framework as filters
from .models import MyModel

class AoYuStudentFilter(filters.FilterSet):
    # 已有的过滤器...
    
    # 添加一个新的过滤器,用于`category`不等于6
    category_not = filters.NumberFilter(method='filter_category_not')
    
    class Meta:
        model = MyModel
        fields = ['name_student', 'id_student', 'voucher_number', 'from_high_school', 'from_university', 'subjects_before', 'subjects_after', 'from_university_major', 'date_admission_daterangeStart', 'date_admission_daterangeEnd', 'create_datetime_daterangeStart', 'create_datetime_daterangeEnd', 'score_total_min', 'score_total_max', 'category_not']
    
    def filter_category_not(self, queryset, name, value):
        """
        自定义过滤方法,排除category等于指定值的记录
        """
        if value is not None:
            return queryset.exclude(category=value)
        return queryset

在这个例子中,category_not过滤器通过指定method='filter_category_not'来引用一个自定义的过滤方法。这个方法接收queryset、字段名称(name)和过滤值(value),并返回一个排除了特定category值的查询集。

当想要过滤category不等于6的记录时,可以在API请求中添加一个参数category_not=6。这样,filter_category_not方法会被调用,并且queryset会被更新为排除category值为6的记录。

MyModel应替换为实际使用的模型名称,并确保category字段存在于该模型中。此外fields列表中的其它字段名应该根据你的模型实际字段进行相应的调整。

相关推荐
数智化管理手记1 小时前
手工统计指标误差大、效率低?指标管理系统如何告别人工算数痛点?
大数据·运维·数据库·人工智能·云计算
ShiXZ2137 小时前
Redis 常用指令全集:redis-cli 实战速查手册
数据库·redis·缓存
晓子文集7 小时前
Tushare接口文档:期货日线行情(fut_daily)
大数据·数据库·金融数据·量化投资·tushare
WA内核拾荒者8 小时前
WhatsApp 账号异常检测的自动化告警系统设计
数据库·python·自动化
龙仔72511 小时前
人大金仓OS_Core数据库自动备份实施笔记(银河麒麟Linux)
linux·数据库·笔记·备份·人大金仓
sunxr.22712 小时前
Mysql-----最后一次作业
数据库·mysql
普通网友12 小时前
Python FastAPI 异步数据库管理
数据库·fastapi
晓子文集12 小时前
Tushare接口文档:期货合约信息表(fut_basic)
大数据·数据库·金融·金融数据·量化投资
三言老师13 小时前
CentOS7.9:Redis‑Cluster集群部署结构化实战教程
linux·运维·服务器·数据库
weixin_BYSJ198713 小时前
springboot校园自习室管理小程序---附源码32142
java·javascript·spring boot·python·django·flask·php