提问
django 在API接口fitler的时候如何过滤 category 不等于6的
解答
为了在AoYuStudentFilter
中设置过滤category
不等于6的条件,需要使用django_filters
库中的exclude
方法。不过直接在FilterSet
中使用exclude
可能不那么直观,因为FilterSet
主要设计用来包含符合条件的结果,而不是排除它们。可以通过定义自定义过滤方法来实现这一点。
已经安装了django_filters
库并正确配置了Django项目以使用它。
可以通过以下方式在你的FilterSet
类中添加一个自定义方法来实现category
不等于6的过滤:
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
列表中的其它字段名应该根据你的模型实际字段进行相应的调整。