我有 2 个表,想要在结果集上实现并集? 我创建了一个父模型,并将其 Pk AS FK 包含在两个子表中,并在其余框架中实现以下要求
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.
有人能告诉我如何使用父项获取子项的值吗? 谢谢。
最佳答案
您可能使用模型序列化器。为了序列化两个或多个不同的模型,您需要编写一个基于非模型的序列化器。然后在 API 中获取两者并使用 itertools.chain 附加它们来绑定(bind)它们并将结果转换为列表。然后将列表传递给序列化器...等等。
希望这有帮助 - 一切都在 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)
关于django - union 不在 django Rest 框架中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23062269/