使用多个值进行Tastypie过滤

nkn*_*knj 15 api django rest tastypie

我有一个关于过滤tastypie的简单问题.

我想过滤多个值.例如:

/api/v1/message/?accountId=1,5,12

这不起作用.知道我怎么能这样做吗?

我需要使用高级过滤吗?如果是,我该如何创建这样的过滤器?一个简单的puesdo代码的简单例子将是伟大的!

谢谢!

Vin*_*lli 19

嗯,

你可以这样做:

/api/v1/message/?accountId__in=1&accountId__in=5&accountId__in=12

PS:在过滤元属性时,添加 {'accountId': ALL}


wob*_*col 9

最近的版本似乎很容易 - 只需使用"__in":

/api/v1/message/?accountId__in=1,5,12
Run Code Online (Sandbox Code Playgroud)

(我假设你的资源Meta类需要一个条目,filtering = {'accountId':ALL})


Hed*_*ide 8

您必须构建并应用过滤器.这是一个小片段,最好在build_filters中构建过滤器,然后将其应用于apply_filters,但你会得到这个想法

class Foo(ModelResource):

    # regular stuff goes here...

    def apply_filters(self, request, applicable_filters):
        base_object_list = super(Foo, self).apply_filters(request, applicable_filters)
        query = request.GET.get('query', None)
        ids = request.GET.get('ids', None)
        filters = {}
        if ids:
            ids = ids.replace('+', ' ').split(' ')
            filters.update(dict(id__in=ids))
        if query:
            qset = (
                Q(title__icontains=query, **filters) |
                Q(description__icontains=query, **filters)
            )
            base_object_list = base_object_list.filter(qset).distinct()
        return base_object_list.filter(**filters).distinct()
Run Code Online (Sandbox Code Playgroud)