15

我有一个关于在美味派中过滤的简单问题。

我想过滤多个值。例如:

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

这不起作用。知道我该怎么做吗?

我需要使用高级过滤吗?如果是,我该如何创建这样的过滤器?一个简单轻松的 puesdo 代码示例会很棒!

谢谢!

4

5 回答 5

19

唔,

你可以这样做:

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

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

于 2012-07-11T16:52:11.687 回答
10

最新版本似乎很容易工作 - 只需使用“__in”:

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

(我假设您需要在资源 Meta 类中添加一个条目,filtering = { 'accountId' : ALL })

于 2014-02-03T15:06:56.113 回答
9

您必须构建并应用过滤器。这是一个小片段,最好在 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()
于 2012-07-11T17:26:19.567 回答
2

/api/v1/message/?accountId__in=1,5,12
这对我来说是正确的方法,它简单明了。

/api/v1/message/?accountId__in=1&accountId__in=5&accountId__in=12
这种方式很奇怪,看起来很丑。

当然,您需要 filtering = { 'accountId' : ALL }在资源 META 中添加。

于 2017-07-26T05:48:26.000 回答
1

您必须在Meta 类中声明过滤列。这是一个默默无闻的安全规则。

因此,accountId__in=[..]规则就是其中之一。

``` 过滤 = { 'accountId' : ALL } 或过滤 = { 'accountId' : [ ..., 'in' ] }

```

于 2014-03-19T17:11:38.050 回答