我有一个包含嵌套序列化器字段的序列化器。我已经设置好了急切加载,一切都很顺利。
然而,我不得不向嵌套字段添加一些自定义过滤器,这需要使用 SerializerMethodField。
在这个更改之后,预取相关的急切加载不再起作用了。我该如何优化带有 SerializerMethodField 的序列化器?
以下是我的初始工作设置:
# views.py
class MyView(generics.ListAPIView):
serializer_class = WorkingSerializer
def get_queryset(self):
queryset = MyModel.objects.all()
queryset = self.get_serializer_class().setup_eager_loading(queryset)
return queryset
# serializers.py
class WorkingSerializer(serializers.ModelSerializer):
related_field_name = CustomSerializer(many=True)
@staticmethod
def setup_eager_loading(queryset):
queryset = queryset.prefetch_related('related_field_name')
return queryset
这是我的修改后的序列化程序,但它并不能正常工作:
# serializers.py
class NotWorkingSerializer(serializers.ModelSerializer):
related_field_name = serializers.SerializerMethodField('get_related_field')
def get_related_field(self, instance):
queryset = instance.related_field_name.all()
# some filtering done here
return queryset
@staticmethod
def setup_eager_loading(queryset):
queryset = queryset.prefetch_related('related_field_name')
return queryset
NotWorkingSerializer
的精确代码。 - Sardorbek Imomalievinstance.related_field_name.objects.all()
。如果它是一个相关字段,那么这样做非常奇怪,应该使用instance.related_field_name.all()
。 - Sardorbek Imomaliev