2014-04-14 65 views
3

我有2表,並希望在結果集上實現聯合? 我已裝箱一個父模型,包括它的PK AS FK兩個子表,並在休息框架實現以下奎雷斯工會在django rest framwork中不工作?

q1 = parent.objects.filter(chile_1__isnull=True).filter(chile_1__name='blog').values('chile_1__id').extra(select = {"id":"chile_1__id"}) 

    q2 = parent.objects.filter(chile_2__isnull=True).filter(chile_2__name='blog1').values('chile_2__id').extra(select = {"id":"chile_2__id"}) 

就連我也創建一個包含不同的字段名兩個孩子的別名,當我運行以下工會

q3 = q1 | q2 

顯示以下錯誤

TypeError: Merging 'GeoValuesQuerySet' classes must involve the same values in each case.

會有人告訴我如何解決兒童使用的值來獲得家長嗎? 謝謝。

回答

1

您可能使用模型串化器。爲了序列化兩個或更多不同的模型,您需要編寫一個基於非模型的序列化程序。然後在API中獲取並使用itertools.chain將它們附加到綁定它們並將結果轉換爲列表。然後將這個列表傳遞給序列化器... etvoilà。

希望這有助於 - 它的所有在休息文檔。

編輯:一個例子:



    class MyCustomSerializer(serializers.Serializer): 
     object_pk = serializers.IntegerField(source='pk') 
     name = serializers.CharField() 
     goloc = serializers.CharField(source='get_geoloc') 

    class MyCustomViewset(viewsets.ModelViewSet): 
     serializer_class = MyCustomSerializer 
     def list(self, request): 
      mylist = [] 
      # q1 and q2 querysets need still to be fetched... 
      for o in q1: 
       mylist.append(o) 
      for o in q2: 
       mylist.append(o) 
      queryset = mylist 
      serializer = MyCustomSerializer(queryset, many=True) 
      return Response(serializer.data) 

+0

我使用模型庫消毒。我可以在同一個應用程序中同時使用模型基序列化和非模型序列化嗎? – yousafHarry

+0

是的,你可以!我強烈建議您閱讀教程和api指南以獲得休息,我是否回答您的問題?所有最好的 – rollinger

+0

@phil這個錯誤,當我嘗試'列表'對象沒有屬性'_clone' –