如何使用Response将从现有URL检索的JSON转换为REST Framework中的视图

时间:2019-03-12 07:53:40

标签: django django-rest-framework

我想使用Django Rest Framework从View中特定URL显示接收JSON。来自CarViewSet和外部json的组合视图。您可以在我的代码中看到我希望将director_detail = requests.get('http://192.168.10.1/BASIC/GetEmployees/'+direct_id)中的JSON与 CarViewSet

结合使用

这是我的代码 View.py

from django.shortcuts import render

# Create your views here.
from rest_framework import viewsets, filters
from .models import getData
from .serializers import CarSerializer
import requests
from rest_framework.response import Response

class CarViewSet(viewsets.ModelViewSet):

    queryset = getData.objects.all()
    serializer_class = CarSerializer
    filter_backends = (filters.SearchFilter,)
    __basic_fields = ('plate_no',)
    search_fields = __basic_fields

    def list(self, request):
        queryset = getData.objects.all()
        serializer = CarSerializer(queryset, many=True)

        plateno = self.request.query_params.get('plate_no', None)
        if plateno is not None:
            queryset =  queryset.filter(plate_no=plateno)
            serializer = CarSerializer(queryset, many=True)
            data = serializer.data
            empid= data[0]['empidlong']

            requests.get('http://192.168.10.1/BASIC/GetEmployees/'+empid)
            direct_id =data[0]['director_emp_id']
            director_detail = requests.get('http://192.168.10.1/BASIC/GetEmployees/'+direct_id)
            #director_detail.json()

        return Response(data,director_detail.json())

谢谢。

1 个答案:

答案 0 :(得分:0)

如果您的默认渲染器为“ JSONRenderer”(文档here)   一种可能的解决方案是将 data director_detail.json()组合成一个json。正因为如此,它作为参数传递给Response()。

除此之外,可能最好将“ GetEmployees”端点中的get功能抽象为一个函数,然后在两个站点(“ GetEmployees”和“ CarViewSet”)中使用该函数,而不是在内部进行请求另一个请求(即使这两个请求都属于同一个应用程序或项目,甚至更多,我都不知道这是否是您的情况)。