Django序列化器:在嵌套的序列化器中获取有序字典

5

我是一个在另一个序列化器内部的序列化器,用于在同一响应中显示来自一个模型的信息和来自另一个模型的选定字段。

这看起来像这样:

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

运行 RouteSerializer 时,我希望得到一个响应:
'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)])
]

如何返回一个字典列表?


“OrderedDict” 是字典的一种。当它转换为 JSON 格式时会自动适配。 - Will Keeling
@WillKeeling,你想把它写成答案吗?如果是的话,这些积分就归你了。 - Preston
1
已撰写完成 - 感谢 @User632716! - Will Keeling
2个回答

2
尽管在调试输出中看到的是 OrderedDict([...]),但实际上 OrderedDict 是一个 dict,因此转换为 JSON 后会产生您期望的结果。

0

我在使用视图集的端点时遇到了相同的错误。我之前使用了类似于这样的代码:

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

所以,我通过将返回值更改为以下代码来解决了问题:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接