工会在django休息框架中没有工作?

时间:2014-04-14 14:05:46

标签: django django-rest-framework

我有2个表并希望在结果集上实现联合? 我创建了一个父模型,并将其Pk AS FK包含在两个子表中,并在休息框架中实现以下quires

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:合并' GeoValuesQuerySet'课程必须涉及相同的课程   在每种情况下的价值观。

有人会告诉我如何使用父母获得孩子的价值观吗? 感谢。

1 个答案:

答案 0 :(得分:1)

您可能使用模型序列化程序。为了序列化两个或更多不同的模型,您需要编写基于非模型的序列化器。然后在API中获取两者并使用itertools.chain附加它们以绑定它们并将结果转换为列表。然后将列表传递给序列化程序......etvoilà。

希望这会有所帮助 - 这一切都在Rest文档中。

编辑:一个例子:



    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)