Django Rest Frameworkで、シリアライザーが別のシリアライザーにネストされている場合、どのようにフィルタリングしますか?
私のフィルターはDRFビューセットに適用されますが、別のシリアライザーの内部からシリアライザーを呼び出すと、ネストされたシリアライザーのビューセットが呼び出されないため、ネストされた結果はフィルター処理されていないように見えます。
元のビューセットにフィルターを追加しようとしましたが、ネストされた結果が個別の事前にフェッチされたクエリとして呼び出されるため、ネストされた結果をフィルターに掛けていないようです。(ネストされたシリアライザーは逆ルックアップです。)
ネストされたシリアライザー自体にget_queryset()オーバーライドを追加して(ビューセットから移動して)、そこにフィルターを追加することは可能ですか?私もそれを試しましたが、運がありませんでした。
これは私が試したものですが、呼ばれることさえないようです:
class QuestionnaireSerializer(serializers.ModelSerializer):
edition = EditionSerializer(read_only=True)
company = serializers.StringRelatedField(read_only=True)
class Meta:
model = Questionnaire
def get_queryset(self):
query = super(QuestionnaireSerializer, self).get_queryset(instance)
if not self.request.user.is_staff:
query = query.filter(user=self.request.user, edition__hide=False)
return query
get_queryset
は、ModelViewSet
Serializerではなく、のクラスです。そのため、呼び出されません