Ответ 1
Хм,
Вы можете сделать это:
/api/v1/message/?accountId__in=1&accountId__in=5&accountId__in=12
PS: при фильтрации мета атрибута добавьте {'accountId': ALL}
У меня был простой вопрос о фильтрации в tastypie.
Я хочу фильтровать несколько значений. Например:
/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()
Самая последняя версия, похоже, работает довольно легко - просто используйте "__in":
/api/v1/message/?accountId__in=1,5,12
(Я предполагаю, что вам понадобится запись в ваших ресурсах. Meta-класс, filtering = {'accountId': ALL})
/api/v1/message/?accountId__in=1,5,12
это правильный путь для меня, это легко и просто.
/api/v1/message/?accountId__in=1&accountId__in=5&accountId__in=12
этот путь странный и выглядит уродливым.
конечно, вам нужно добавить filtering = { 'accountId' : ALL }
в ресурс META.
Вы должны объявить столбцы фильтрации в классе Metastrong > . Это правило безопасности по неизвестности.
Таким образом, правило accountId__in = [..] является одним из них.
`` ` filtering = {'accountId': ALL} ИЛИ filtering = {'accountId': [..., 'in']}
`` `