即使我使用了 ScrapyItem.objects.all(),我在 django rest 框架的 APIView 内的 post 方法中也只得到一个对象。任何人都知道为啥

Posted

技术标签:

【中文标题】即使我使用了 ScrapyItem.objects.all(),我在 django rest 框架的 APIView 内的 post 方法中也只得到一个对象。任何人都知道为啥【英文标题】:I am getting only one object in post method inside APIView of django rest framework even if I used ScrapyItem.objects.all(). Anyone knows why即使我使用了 ScrapyItem.objects.all(),我在 django rest 框架的 APIView 内的 post 方法中也只得到一个对象。任何人都知道为什么 【发布时间】:2021-12-29 06:34:46 【问题描述】:

##任何人都知道如何解决这个问题。即使我使用了 ScrapyItem.objects.all(),我在 django rest 框架的 APIView 内的 post 方法中也只得到一个对象。谁知道为什么##

class ScrapyViewSet(APIView):
        def get(self, request, format=None):
            snippets = ScrapyItem.objects.all()
            serializer =ScrapySerializer(snippets, many=True)
            return Response(serializer.data)
    
    
        def post(self, request):
            snippets = ScrapyItem.objects.all()
            domain=request.data['domain']
            print(domain)
            
            
            for i in snippets:
                print(i)
                if i.domain==domain:
                    return Response("status": "success", "data": str(i.data), status=status.HTTP_200_OK) 
    
                else:
                    return Response("status": "error", "data": 'error', status=status.HTTP_400_BAD_REQUEST)

【问题讨论】:

return 将停止枚举并返回Response(..) 对象 【参考方案1】:

return 语句停止函数并返回 return 关键字之后的表达式结果。因此,这意味着即使存在具有给定域的其他对象,也不会考虑这些对象。

您可以简单地序列化与给定域匹配的项目集合:

class ScrapyViewSet(APIView):
    def get(self, request, format=None):
        snippets = ScrapyItem.objects.all()
        serializer =ScrapySerializer(snippets, many=True)
        return Response(serializer.data)
    
    def post(self, request):
        domain=request.data['domain']
        snippets = ScrapyItem.objects.filter(domain=domain)
        if snippets:
            serializer = ScrapySerializer(snippets, many=True)
            return Response('status': 'success', 'data': serializer.data, status=status.HTTP_200_OK) 
        else:
            return Response('status': 'error', 'data': 'error', status=status.HTTP_400_BAD_REQUEST)

不过,通常使用 POST 请求来更新应用程序的状态:创建、更新或删除实体,而不是检索项目。

【讨论】:

以上是关于即使我使用了 ScrapyItem.objects.all(),我在 django rest 框架的 APIView 内的 post 方法中也只得到一个对象。任何人都知道为啥的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Jest 不让我使用节点测试环境,即使他们自己更改了它?

GetAsync 使用基本身份验证,即使我指定了 Bearer

即使我使用了 MediaMediaQuery,容器高度也不完全占用 [关闭]

即使我在着色器中使用了变量,glGetUniformLocation 仍返回 -1

“ORA-00001:违反了唯一约束”,即使使用异常

即使我使用了 ToList() 方法,MVC 应用程序也会抛出 ObjectDisposedException