Django Serilizer:在嵌入式序列化器中获取有序字典

rur96b6h  于 2023-07-01  发布在  Go
关注(0)|答案(2)|浏览(90)

我是一个序列化器在另一个序列化器中,显示来自一个模型的信息,并在同一个响应中显示来自另一个模型的选定字段。
这看起来像这样:

class SimpleRouteClientConstraintSerializer(serializers.ModelSerializer):

     name = serializers.SerializerMethodField()

    def get_name(self, obj):
        default_constraint = RouteDefaultConstraint.objects.get(pk=obj.route_default_constraint_id)
        return default_constraint.name

    class Meta:
        model = RouteClientConstraint
        fields = ('name', 'value')

class RouteSerializer(serializers.ModelSerializer):
    ...
    # Calling first serializer here
    routeClientConstraints = SimpleRouteClientConstraintSerializer(many=True, required=False)
    ...

    class Meta:
        model = Route
        fields = (..., 'routeClientConstraints', ...)
        depth = 1

当运行RouteSerilalizer时,我需要一个响应:

'routeClientConstraints': [{
    'name': 'my name'
    'value': 'confused'
},
...
]

如果我像上面的代码那样使用序列化器,我会得到

'routeClientConstraints': [
    OrderedDict([
        ('name', 'Minimum life boats'),
        ('value', '6')
    ])
]

我尝试将序列化器更改为:routeClientConstraints = SimpleRouteClientConstraintSerializer(many=True, required=False).data,我希望它会给予我json格式,但我得到了这个:

'routeClientConstraints': [
    OrderedDict([
        ('id', 1),
        ('value', '6'), 
        ('created_at', '2018-11-10T14:17:39.263848Z'), 
        ('updated_at', '2018-11-10T14:17:39.263861Z'), 
        ('route_default_constraint', 1), 
        ('route', 1)])
]

如何返回字典列表?

qmb5sa22

qmb5sa221#

虽然在调试输出中看到的是OrderedDict([...]),但OrderedDict实际上是dict,因此当转换为JSON时,它将产生您所期望的结果。

xvw2m8pv

xvw2m8pv2#

我在使用视图集的端点时也遇到了同样的错误。我当时用的是这样的东西

return Response({“message”:f”{blocked_users}"},status=status.HTTP_200_OK)

所以我可以通过将返回改为

return Response({“message”:blocked_users},status=status.HTTP_200_OK)

相关问题