Django rest framework 如何在generics.ListAPIView中编写可以在Django DRF的APIView中编写的功能

Django rest framework 如何在generics.ListAPIView中编写可以在Django DRF的APIView中编写的功能,django-rest-framework,drf-queryset,Django Rest Framework,Drf Queryset,我有一个函数基视图,它从URL获取2个参数 这会给出正确的结果,但当我尝试在generics.ListAPIView中编写相同的功能时 /api/v1/Competity/0b36d92a-51a7-4752-9df1-e5f2733116c1/处的类型错误/ 类型为“method”的对象没有len() 谁能帮助我-如何在泛型.ListAPIView或视图集.ModelViewSet从序列化程序类中删除many=True。创建如下所示的get_queryset函数,而不是queryset函数

我有一个函数基视图,它从URL获取2个参数

这会给出正确的结果,但当我尝试在generics.ListAPIView中编写相同的功能时

/api/v1/Competity/0b36d92a-51a7-4752-9df1-e5f2733116c1/处的类型错误/ 类型为“method”的对象没有len()


谁能帮助我-如何在泛型.ListAPIView视图集.ModelViewSet

序列化程序类
中删除
many=True
。创建如下所示的
get_queryset
函数,而不是
queryset
函数

班级竞赛\u详细信息\u按\u id\u类别(generics.ListAPIView):
serializer_class=ArtWorksSerializer1
queryset=Artwork.objects.all()
权限\类=[AllowAny]
def get_queryset(自我):
返回self.queryset.filter(artcontest=self.kwargs['id'],category\uuuuu name\uuuuuuuuuu iexact=self.kwargs['category\u name'])
更新:工作: ListAPIView类继承ListModelMixin

类ListModelMixin:
"""
列出一个查询集。
"""
def列表(自我、请求、*args、**kwargs):
queryset=self.filter\u queryset(self.get\u queryset())
page=self.paginate_queryset(queryset)
如果页面不是“无”:
serializer=self.get\u序列化程序(第页,多个=True)
返回self.get_分页的_响应(serializer.data)
serializer=self.get\u序列化程序(queryset,many=True)
返回响应(serializer.data)

看这里

序列化程序类
中删除
many=True
。创建如下所示的
get_queryset
函数,而不是
queryset
函数

班级竞赛\u详细信息\u按\u id\u类别(generics.ListAPIView):
serializer_class=ArtWorksSerializer1
queryset=Artwork.objects.all()
权限\类=[AllowAny]
def get_queryset(自我):
返回self.queryset.filter(artcontest=self.kwargs['id'],category\uuuuu name\uuuuuuuuuu iexact=self.kwargs['category\u name'])
更新:工作: ListAPIView类继承ListModelMixin

类ListModelMixin:
"""
列出一个查询集。
"""
def列表(自我、请求、*args、**kwargs):
queryset=self.filter\u queryset(self.get\u queryset())
page=self.paginate_queryset(queryset)
如果页面不是“无”:
serializer=self.get\u序列化程序(第页,多个=True)
返回self.get_分页的_响应(serializer.data)
serializer=self.get\u序列化程序(queryset,many=True)
返回响应(serializer.data)

看这里

它如何返回序列化结果-我尝试了serializer=ArtWorksSerializer(queryset,many=True)返回响应(serializer),但它给出的“Response”类型的对象没有len(),因为Errormany=True发生在引擎盖下。因为
ListAPIView
classIf您的URL和其他代码正常,那么这应该是可行的。我的坏消息是可行的-但是序列化数据如何作为响应传递?我只是无法理解这个概念是的,我做了例外它如何返回序列化结果-我尝试了serializer=ArtWorksSerializer(queryset,many=True)返回响应(serializer),但它给出了类型为“Response”的对象没有len(),因为Errormany=True发生在引擎盖下。因为
ListAPIView
classIf您的URL和其他代码正常,那么这应该是可行的。我的坏消息是可行的-但是序列化数据如何作为响应传递?我只是无法理解这个概念是的,除了
@api_view(['GET',])
@permission_classes([AllowAny])
def Contest_detail_by_id_and_category(request, id, category_name):
 
    if request.method == 'GET':
        
        artcontests = Artwork.objects.filter(artcontest = id,category__name__iexact=category_name)
        serializer = ArtworkSerializer(artcontests, many=True)
        # serializer = ArtworkSerializer(artcontests, many=True)
        return Response(serializer.data)
class Contest_detail_by_id_category(generics.ListAPIView):

 
    serializer_class = ArtworkSerializer1(many=True)
    permission_classes = [AllowAny]
    
    def queryset(self):
 
        queryset = Artwork.objects.filter(artcontest = self.kwargs['id'],category__name__iexact=self.kwargs['category_name'])
     
        # queryset = self.get_queryset()
        serializer = ArtworkSerializer1(queryset)
        return Response(serializer.data)