我是一个序列化器在另一个序列化器中,显示来自一个模型的信息,并在同一个响应中显示来自另一个模型的选定字段。
这看起来像这样:
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)])
]
如何返回字典列表?
2条答案
按热度按时间qmb5sa221#
虽然在调试输出中看到的是
OrderedDict([...])
,但OrderedDict
实际上是dict
,因此当转换为JSON时,它将产生您所期望的结果。xvw2m8pv2#
我在使用视图集的端点时也遇到了同样的错误。我当时用的是这样的东西
return Response({“message”:f”{blocked_users}"},status=status.HTTP_200_OK)
所以我可以通过将返回改为
return Response({“message”:blocked_users},status=status.HTTP_200_OK)