我有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'课程必须涉及相同的课程 在每种情况下的价值观。
有人会告诉我如何使用父母获得孩子的价值观吗? 感谢。
答案 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)