У меня есть конечная точка пользователя, работающая нормально, с различными фильтрами FilterBackends. Я пытаюсь добавить новый фильтр, чтобы иметь возможность передавать список идентификаторов, таких как ?ids=1,5,7
, и возвращать только этих пользователей.Интерфейс фильтра Django Rest Framework и класс фильтра
Я нашел следующий фильтр, который завершал, но потом ломает мои другие фильтры:
class ListFilter(Filter):
def filter(self, qs, value):
if not value:
return qs
self.lookup_type = 'in'
values = value.split(',')
return super(ListFilter, self).filter(qs, values)
class UserListFilter(FilterSet):
ids = ListFilter(name='id')
class Meta:
model = get_user_model()
fields = ['ids']
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
filter_backends = (SearchFilter, DjangoFilterBackend, OrderingFilter, InterestsFilter)
filter_fields = ('username', 'native_language', 'country', 'interests',)
ordering_fields = ('username',)
search_fields = ('first_name', 'last_name')
filter_class = UserListFilter
Перед добавления в этом обычае filter_class всех фильтров движки работают нормально, но затем после добавления в filter_class, он разбивает их все, но я могу затем фильтровать список идентификаторов.
В файле filtering docs они приводят пример использования обоих бэкэндов и фильтра, поэтому я думаю, что это должно сработать, но это что-то не так с моим кодом. Есть идеи?
У меня была аналогичная проблема при попытке смешать filter_backends с filter_class. Но потом я обнаружил, что django-filter также имеет возможность упорядочивать результаты, и это то, что мне нужно, поэтому я просто определил фильтр упорядочения с использованием django-фильтра и остановился с использованием filter_backends этого класса. – Lukasz