django - 姜戈 | 休息 | 添加顶级 JSON 字段中断过滤选项
问题描述
我必须工作 ListAPIView 视图,通过它我可以通过 django-filter 值进行过滤。但是我需要在 JSON 中添加一个对象(因为 AMP HTML 需要它),当我添加它时,它会破坏这个过滤。
当我使用这个视图时,过滤效果很好:
class TypeAPIView(generics.ListAPIView):
permission_classes = (AllowAny, )
queryset = Type.objects.all()
serializer_class = TypeSerializer
filter_backends = [DjangoFilterBackend]
filterset_fields = ('code', )
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
但是当我想添加一个顶级 JSON 对象时,它会破坏一个过滤选项:
class TypeAPIView(generics.ListAPIView):
permission_classes = (AllowAny, )
queryset = Type.objects.all()
serializer_class = TypeSerializer
filter_backends = [DjangoFilterBackend]
filterset_fields = ('code', )
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
serializer = self.get_serializer(queryset, many=True)
# --- modified from here ---
custom_data = {
'vehicles': serializer.data
}
return Response(custom_data)
# --- END modified from here ---
是否可以添加顶级 JSON 对象并保持 django-filter 的过滤工作?
谢谢!
解决方案
此代码取自 django 源代码:
class ListModelMixin:
"""
List a queryset.
"""
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
尝试使用这种格式并从您的终端添加跟踪日志。