Django-filter: 过滤 ArrayField

创建于 2016-08-24  ·  4评论  ·  资料来源: carltongibson/django-filter

是否可以过滤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()调用。

另一方面,处理索引和切片变换要复杂一些,它们是非结构化的,理论上具有无限数量的组合。

所有4条评论

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
此页面是否有帮助?
0 / 5 - 0 等级