django - union 不在 django Rest 框架中工作?

标签 django django-rest-framework

我有 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/

相关文章:

angular - 从 Django Rest Framework 将经过身份验证的用户传递给 SendBird

python - 在 django View 中获取 GET

python - 如何访问自定义管理器中的模型属性?

python - django app : Cannot assign "' '": "ImageText. 链接”必须是一个 "Link"实例

django - 如何检查 Django 表单是否已保存以显示适当的反馈?

Django:使用 login_required 进行测试

python - Django 和 Celery - 检查 GroupResult 是否准备就绪时出现关键错误

django 多态树序列化器

django - 如何在 DRF 中序列化 GenericForeignKey?

python - 如何处理 Django REST 框架中字段的 3 级权限