2015-10-05 102 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

相關問題