documented hereと同様の方法でDjango-Rest-Framework-Filtersを使用しています。カスタムPostQuerySet
クエリーセットメソッドを使用している関連Postクラスのいくつかの条件でAuthorをフィルタリングしたいと思います。Django-Rest-Framework-Filters:RelatedFilterでフィルタが使用されているカスタムクエリセットメソッドを使用しています
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の一部として、このフィルタを使用しようとすると、例えば:フィルター、myfilter
は、としてPostFilter
フィルタセットに定義されています
"AttributeError: 'Manager' object has no attribute 'myqueryset_method'"
それは直感に反するようだが、それはRelatedFilterによって呼び出された後のクエリセットではありませんので、あなたがqs
arugmentにPostQuerySetメソッドを実行することはできません表示されます。
/api/authors?posts__myfilter=true
エラーがスローされます。ドキュメントで説明したように:
[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によって消費されているフィルタでをできますか?
これは現時点で実現可能ではなく、[#99](https://github.com/philipn/django-rest-framework-filters/issues/99)の解決策に依存しています。 。私はしばらくの間、この問題でゆっくりと目を奪われましたが、パフォーマンスの問題にぶつかりました。 – Sherpa