NOT IN 的 django 过滤器为 lookup_expr
django filter for NOT IN as lookup_expr
我们可以使 django 过滤器使用“in
”表达式发送逗号分隔的字符串。比如
import django_filters
class NumberInFilter(django_filters.BaseInFilter, django_filters.NumberFilter):
pass
class BookFilter(django_filters.FilterSet):
author = NumberInFilter(field_name="author__id", lookup_expr="in")
但是,我一直在寻找发送逗号分隔的查询数据并获得没有查询数据的响应的方法。像
class BookFilter(django_filters.FilterSet):
author = NumberInFilter(field_name="author__id", lookup_expr="not_in")
绝对没有像“not_in
”这样的东西。你能给我一个解决方案吗?
我不确定在 django-filters 中是否有一个简单的内置函数来进行独占查找。但是,您可以使用过滤器集 class 上带有 .exclude()
的自定义方法轻松地完成此操作:
class BookFilter(django_filters.FilterSet):
author = django_filters.NumberFilter(method='filter_author')
def filter_author(self, queryset, name, value):
return queryset.exclude(author_id__in=value)
只是想补充一下我终于得到的东西,
class BookFilter(django_filters.FilterSet):
author = django_filters.NumberFilter(method='filter_author')
def filter_author(self, queryset, name, value):
if value:
return queryset.exclude(author__id__in=value.split(','))
return queryset
似乎有更优的解决方案。您可以像这样使用 NumberFilters 的 exclude=True
选项:
class BookFilter(django_filters.FilterSet):
author = NumberInFilter(
field_name="author__id",
lookup_expr="in",
exclude=True
)
我们可以使 django 过滤器使用“in
”表达式发送逗号分隔的字符串。比如
import django_filters
class NumberInFilter(django_filters.BaseInFilter, django_filters.NumberFilter):
pass
class BookFilter(django_filters.FilterSet):
author = NumberInFilter(field_name="author__id", lookup_expr="in")
但是,我一直在寻找发送逗号分隔的查询数据并获得没有查询数据的响应的方法。像
class BookFilter(django_filters.FilterSet):
author = NumberInFilter(field_name="author__id", lookup_expr="not_in")
绝对没有像“not_in
”这样的东西。你能给我一个解决方案吗?
我不确定在 django-filters 中是否有一个简单的内置函数来进行独占查找。但是,您可以使用过滤器集 class 上带有 .exclude()
的自定义方法轻松地完成此操作:
class BookFilter(django_filters.FilterSet):
author = django_filters.NumberFilter(method='filter_author')
def filter_author(self, queryset, name, value):
return queryset.exclude(author_id__in=value)
只是想补充一下我终于得到的东西,
class BookFilter(django_filters.FilterSet):
author = django_filters.NumberFilter(method='filter_author')
def filter_author(self, queryset, name, value):
if value:
return queryset.exclude(author__id__in=value.split(','))
return queryset
似乎有更优的解决方案。您可以像这样使用 NumberFilters 的 exclude=True
选项:
class BookFilter(django_filters.FilterSet):
author = NumberInFilter(
field_name="author__id",
lookup_expr="in",
exclude=True
)