[英]Serialize nested models as a keyed JSON object in Django
I have a Django model that has many=True nesting, and I'd like to serializer the nested objects (in Django Rest Framework) as an object instead of a list (which is the default in DRF). 我有一个具有很多= True嵌套的Django模型,并且我想将嵌套对象(在Django Rest Framework中)序列化为一个对象而不是一个列表(这是DRF中的默认值)。
Adding many=True serializes things as a list. 添加many = True会将事物序列化为列表。
class PostSerializer(serializers.ModelSerializer):
votes = VoteSerializer(many=True)
Instead of rendering the votes as a list of objects: 而不是将投票呈现为对象列表:
[... posts: [{id: 123, user: A}, {id: 456, user: B}, ....]
I'd like to render votes as a list of objects keyed by id: 我想将投票作为由id键控的对象列表:
[... posts: {123: {user: A}, 456: {user: B}}, ...]
This is poking into a private API and isn't exactly concise, but should work. 这是一个私有API,虽然不够简洁,但应该可以。
class DictManyRelatedField(serializers.ManyRelatedField):
def to_representation(self, iterable):
return {
value.pk: self.child_relation.to_representation(value)
for value in iterable
}
class VoteSerializer(serializers.ModelSerializer):
user = serializers.CharField()
class Meta:
model = Vote
fields = ('user',)
@classmethod
def many_init(cls, *args, **kwargs):
kwargs['child_relation'] = cls()
return DictManyRelatedField(*args, **kwargs)
class PostSerializer(serializers.ModelSerializer):
votes = VoteSerializer(read_only=True, many=True)
class Meta:
model = Post
fields = ('votes',)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.