Django:名称' filter_name__icontains'未定义
我正在使用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
错误文本
名称:名称'filter_name__icontains'未定义
问题:我如何支持函数中的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
I am working on custom filter in my Django (DRF) app.
Basic filtering (iexact) is working:
queryset = queryset.filter(**{filter_name: term.get(filter_name)}) # OK
But I want to filter CharFields with icontains logic:
queryset = queryset.filter(**{filter_name__icontains: term.get(filter_name)}) # ERROR
Error text
NameError: name 'filter_name__icontains' is not defined
Question: how can I support icontains filtering in my function?
My code
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
filter_name
是一个变量,但您没有定义filter_name__icontains
。您可以为此使用字符串格式:While
filter_name
is a variable, you did not definefilter_name__icontains
. You can use string formatting for this: