Я получаю только один объект в методе post внутри APIView из django rest framework, даже если я использую ScrapyItem.objects.all(). Кто-нибудь знает, почему
#Кто-нибудь знает, как это исправить. Я получаю только один объект в методе post внутри APIView из django rest framework, даже если я использую ScrapyItem.objects.all(). Кто-нибудь знает почему##
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
останавливает функцию и возвращает результат выражения после ключевого слова 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 используется для обновления состояния приложения: создания, обновления или удаления объектов, а не для получения элементов.