Django Serializer:在嵌入式序列化程序中获取有序字典

Django Serilizer: Getting an ordered dictionary in embeded serializer

我是一个序列化程序在另一个序列化程序中以显示来自一个模型的信息,并在同一响应中显示来自另一个模型的选定字段。

看起来像这样:

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)])
]

如何 return 字典列表?

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