ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Django 中使用 filter 过滤不等于条件

Django 中使用 filter 过滤不等于条件 在 Django 的 API 过滤 (django_filters) 中需要实现category字段不等于 6 的过滤规则。由于django_filters主要用于包含特定条件的数据而不直接支持exclude操作因此需要采用自定义方法来实现该过滤条件。解决方案在AoYuStudentFilter过滤类中添加一个category_not过滤器并使用methodfilter_category_not指定自定义过滤方法。该方法通过queryset.exclude(categoryvalue)过滤掉category等于 6 的数据从而返回符合条件的数据集。这样在 API 请求时可以使用category_not6作为查询参数来排除category为 6 的数据。fromdjango_filtersimportrest_frameworkasfiltersfrom.modelsimportMyModelclassAoYuStudentFilter(filters.FilterSet):category_notfilters.NumberFilter(methodfilter_category_not)classMeta:modelMyModel 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]deffilter_category_not(self,queryset,name,value): 过滤掉 category 等于指定值的记录 ifvalueisnotNone:returnqueryset.exclude(categoryvalue)returnqueryset在 API 请求中可以使用category_not6作为查询参数。例如GET /api/students/?category_not6此查询将返回所有category不等于 6 的记录。该方法确保django_filters仍然保持灵活性同时能够满足排除特定值的需求。代码结构清晰适用于 Django REST framework 过滤需求并可根据具体需求进一步扩展。
返回列表