你可以子类化ListSerializer并覆盖该to_representation
方法。
默认情况下,该to_representation
方法调用data.all()
嵌套的查询集。因此,你实际上需要data = data.filter(**your_filters)
在调用该方法之前进行制作。然后,你需要将子类化的ListSerializer
添加为嵌套序列化器的Meta上的list_serializer_class
。
class FilteredListSerializer(serializers.ListSerializer):
def to_representation(self, data):
data = data.filter(user=self.request.user, edition__hide=False)
return super(FilteredListSerializer, self).to_representation(data)
class EditionSerializer(serializers.ModelSerializer):
class Meta:
list_serializer_class = FilteredListSerializer
model = Edition
class QuestionnaireSerializer(serializers.ModelSerializer):
edition = EditionSerializer(read_only=True)
company = serializers.StringRelatedField(read_only=True)
class Meta:
model = Questionnaire