Я пытаюсь применить фильтр к аннотированному набору запросов, как это сделано здесь:
https://docs.djangoproject.com/en/2.0/topics/db/aggregation/#filtering-on-annotations
Аналогично приведенному ниже фрагменту, я бы хотел, чтобы highly_rated
составлял FilterSet, который собирает параметры запроса
highly_rated = Count('books', filter=Q(books__rating__gte=7))
Author.objects.annotate(num_books=Count('books'), highly_rated_books=highly_rated)
Я бы хотел сделать этот highly_rated
компонент FilterSet, который принимает запросы. Что-то вроде:
class MainFilter(FilterSet):
class Meta:
model = Author
fields = {
author: ['in', 'exact'],
genre: ['in', 'exact']
}
class AnnotatedFilter(FilterSet):
class Meta:
fields = {
'books__rating': ['gt', 'lt' ],
}
class MyView(ListApiView):
filter_class = AuthorFilter
def get_queryset(self):
annotated_filter = AnnotatedFilter(request) # how do I set up another filter based on the request?
Author.objects.annotate(num_books=Count('books'), FilterSet=annotated_filter) # how do I apply it to an annotated queryset?
Все, чтобы я мог запросить что-то вроде:
api/authors/?genre=Fantasy&books__rating__gt=5
Где один из параметров выполняется для всех записей, а другие параметры - для аннотированной части.
Любая помощь очень ценится. Спасибо!