2015-10-05 50 views
0

我环顾了过去几天,无法找到一个好办法来做到这一点。我发现了一些其他的线程,但似乎没有任何工作需要它的方式。Django-rest-framework序列化多个查询,但没有相关的字段

这里是问题:我想能够序列化多个查询的结果以返回给用户,以便他们不必在多个端点连接到API,因此服务器可以完成所有重必要时起吊。

我使用API​​View和view.py中的获取请求。

我已经尝试从itertools使用链,但我似乎无法以任何方式访问串行器中的数据。我试过传递一个包含两个查询结果的字典,但似乎也没有工作。

有可能是一个非常简单的方法来解决这个问题,但我似乎无法找到任何文档。

这是代码的简化一块这样的人很容易回答:

views.py

class ModelOutputList(APIView): 
    def get(self, request): 
     data = self.get_queryset() 
     serializer = ModelOutputSerializer(
      data, 
      many=True 
     ) 

     return Response(serializer.data) 

    def get_queryset(self): 
     model1 = Model1.objects.all() 
     model2 = Model2.objects.all() 

     data = list(itertools.chain(model1, model2)) 

     return data 

serializers.py

class ModelOutputSerializer(serializers.Serializer): 
    model1 = Model1Serializer(many=True) 
    model2 = Model2Serializer(many=True) 

    class Meta: 
     fields = ('model1', 'model2') 

与往常一样,任何帮助将不胜感激。

回答

1

试试这个:

views.py

class ModelOutputList(APIView): 
    def get(self, request): 
     obj = self.get_objects() 
     serializer = ModelOutputSerializer(obj) 

     return Response(serializer.data) 

    def get_objects(self): 
     model1 = Model1.objects.all() 
     model2 = Model2.objects.all() 

     obj = {'model1': model1, 'model2': model2} 

     return obj 

serializers.py

class ModelOutputSerializer(serializers.Serializer): 
    model1 = Model1Serializer(many=True) 
    model2 = Model2Serializer(many=True) 

    class Meta: 
     fields = ('model1', 'model2') 
+0

Woops我没有看到编辑的views.py我现在会检查。谢谢。 – prawg

+0

我得到以下错误: 尝试获取序列化器'Model1Serializer'上字段'model1'的值时出现AttributeError。 序列化程序字段可能命名错误,并且不匹配'str'实例上的任何属性或键。 原始异常文本是:'str'对象没有属性'model1'。 – prawg

+0

这将在浏览器中输出正确的json。 AttributeError必须从其他代码中引发。 – JimmyYe