是否可以过滤django.contrib.postgres.fields
定义的字段,如ArrayField
?
django-filter 目前没有任何与 postgres contrib 字段兼容的过滤器 - 您需要创建自己的过滤器。 取决于您要做什么,这或多或少会很困难。 支持ArrayField
的自定义查找非常简单:
class CharArrayFilter(filters.BaseCSVFilter, filters.CharFilter):
pass
class MyFilterSet(filters.FilterSet):
tags__contains = CharArrayFilter(name='tags', lookup_expr='contains')
class Meta:
model = SomethingTaggable
GET http://localhost/api/something-taggable?tags__contains=a,b,c
上面的过滤器将验证逗号分隔的输入并返回一个清理过的值列表,这适用于底层的.filter()
调用。
另一方面,处理索引和切片变换要复杂一些,它们是非结构化的,理论上具有无限数量的组合。
谢谢你的信息。
我暂时将其作为“超出范围”关闭。 乐于考虑记录的、经过测试的拉取请求。 我们可能有能力在未来重新考虑。
更新:
参数name
已重命名为field_name
因此MyFilterSet
应如下所示:
class MyFilterSet(filters.FilterSet):
tags__contains = CharArrayFilter(field_name='tags', lookup_expr='contains')
class Meta:
model = SomethingTaggable
最有用的评论
django-filter 目前没有任何与 postgres contrib 字段兼容的过滤器 - 您需要创建自己的过滤器。 取决于您要做什么,这或多或少会很困难。 支持
ArrayField
的自定义查找非常简单:上面的过滤器将验证逗号分隔的输入并返回一个清理过的值列表,这适用于底层的
.filter()
调用。另一方面,处理索引和切片变换要复杂一些,它们是非结构化的,理论上具有无限数量的组合。