Я использую Django-Rest-Framework-Filters аналогично задокументировано здесь. Я хотел бы отфильтровать автора по некоторому условию в соответствующем классе Post, который использует настраиваемый метод PostQuerySet
queryset. Фильтр myfilter
определен в PostFilter
наборе фильтров как:
class PostFilter(filters.FilterSet):
myfilter = filters.BooleanFilter(name='date_published', method='filter_myfilter')
class Meta:
model = Post
fields = ['title', 'content']
def filter_myfilter(self, qs, name, value):
"""
Calls myqueryset_method defined on PostQuerySet
"""
return qs.myqueryset_method()
class AuthorFilter(filters.FilterSet):
posts = filters.RelatedFilter('PostFilter', queryset=Post.objects.all())
class Meta:
model = Author
fields = ['name']
Проблема в том, что при попытке использовать этот фильтр как часть авторского API, например
/api/authors?posts__myfilter=true
выдается ошибка:
"AttributeError: объект 'Manager' не имеет атрибута 'myqueryset_method'"
Это кажется нелогичным, но похоже, что вы не можете выполнить метод PostQuerySet для qs
arugment, потому что он не является набором запросов Post при вызове с помощью RelatedFilter. Как объяснено в документах:
[when making the filter calls]
/api/posts?is_published=true
/api/authors?posts__is_published=true
"In the first API call, the filter method receives a queryset of posts. In the second, it receives a queryset of users."
Итак, как можно использовать методы настраиваемого набора запросов в фильтре, который используется через RelatedFilter?