我有一個簡單的問題在tastypie過濾。Tasteypie過濾與多個值
我想過濾多個值。例如:
/api/v1/message/?accountId=1,5,12
這行不通。任何想法如何我可以做到這一點?
我需要使用高級過濾嗎?如果是的話,我該如何去創建這樣一個過濾器?一個簡單易用的puesdo代碼示例非常棒!
謝謝!
我有一個簡單的問題在tastypie過濾。Tasteypie過濾與多個值
我想過濾多個值。例如:
/api/v1/message/?accountId=1,5,12
這行不通。任何想法如何我可以做到這一點?
我需要使用高級過濾嗎?如果是的話,我該如何去創建這樣一個過濾器?一個簡單易用的puesdo代碼示例非常棒!
謝謝!
嗯,
你可以這樣做:
/api/v1/message/?accountId__in=1&accountId__in=5&accountId__in=12
PS:在過濾元屬性,添加{'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()
感謝您的幫助。我很難理解這將如何工作。是否還有更多這樣的內容:http://django-tastypie.readthedocs.org/en/latest/resources.html#advanced-filtering在tastypie文檔中對此有所幫助? – nknj 2012-07-11 20:46:18
最新版本似乎很輕鬆地工作 - 只需使用一個「__in」 :
/api/v1/message/?accountId__in=1,5,12
(我假設你需要在你的資源類的Meta中的條目,過濾= { '帳戶ID':ALL})
您必須類聲明過濾列元。這是一個安全通過默默無聞規則。
因此,accountId__in = [..]規則就是其中之一。
``` 濾波= { '的accountId':ALL} OR 濾波= { '的accountId':[..., '在']}
```
/api/v1/message/?accountId__in=1,5,12
這是對我來說正確的方式,它很簡單直接。
/api/v1/message/?accountId__in=1&accountId__in=5&accountId__in=12
這種方式很奇怪,看起來很醜。
當然,您需要在資源META中添加filtering = { 'accountId' : ALL }
。
感謝這工作:)但它會使網址真的很長。有沒有辦法我可以做得更整齊,以防萬一我需要篩選許多帳戶id? – nknj 2012-07-11 20:44:19
簽出'prepend_urls()' – 2013-02-11 23:24:07
這不覆蓋以前的GET參數嗎? – Amyth 2013-05-22 13:25:51