即使我使用了 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,容器高度也不完全占用 [关闭]