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

时间:2018-11-10 14:41:06

标签: python django django-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)])
]

我如何返回词典列表?

1 个答案:

答案 0 :(得分:1)

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