【发布时间】:2022-06-15 05:17:30
【问题描述】:
我正在我的 Django (DRF) 应用程序中处理自定义过滤器。
基本过滤(iexact)正在工作:
queryset = queryset.filter(**{filter_name: term.get(filter_name)}) # OK
但我想用 icontains 逻辑过滤 CharFields:
queryset = queryset.filter(**{filter_name__icontains: term.get(filter_name)}) # ERROR
错误文本
NameError: name 'filter_name__icontains' 未定义
问题:如何在我的函数中支持图标过滤?
我的代码
from django.db.models import QuerySet, CharField
from rest_framework.filters import BaseFilterBackend
from rest_framework.request import Request
class AbstractFilterBackend(BaseFilterBackend):
@staticmethod
def __execute_default_filters(queryset, terms: list):
for term in terms:
filter_name = next(iter(term.keys()))
if hasattr(queryset.model, filter_name):
if queryset.model._meta.get_field(filter_name).__class__ is CharField:
queryset = queryset.filter(**{filter_name__icontains: term.get(filter_name)})
else:
queryset = queryset.filter(**{filter_name: term.get(filter_name)})
return queryset
【问题讨论】:
标签: python-3.x django django-rest-framework