我有一个关于在美味派中过滤的简单问题。
我想过滤多个值。例如:
/api/v1/message/?accountId=1,5,12
这不起作用。知道我该怎么做吗?
我需要使用高级过滤吗?如果是,我该如何创建这样的过滤器?一个简单轻松的 puesdo 代码示例会很棒!
谢谢!
唔,
你可以这样做:
/api/v1/message/?accountId__in=1&accountId__in=5&accountId__in=12
PS:在过滤元属性中,添加{'accountId': ALL}
最新版本似乎很容易工作 - 只需使用“__in”:
/api/v1/message/?accountId__in=1,5,12
(我假设您需要在资源 Meta 类中添加一个条目,filtering = { 'accountId' : ALL })
您必须构建并应用过滤器。这是一个小片段,最好在 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()
/api/v1/message/?accountId__in=1,5,12
这对我来说是正确的方法,它简单明了。
/api/v1/message/?accountId__in=1&accountId__in=5&accountId__in=12
这种方式很奇怪,看起来很丑。
当然,您需要 filtering = { 'accountId' : ALL }
在资源 META 中添加。
您必须在Meta 类中声明过滤列。这是一个默默无闻的安全规则。
因此,accountId__in=[..]规则就是其中之一。
``` 过滤 = { 'accountId' : ALL } 或过滤 = { 'accountId' : [ ..., 'in' ] }
```