Python DRF:序列化程序或视图中的数据结构?
考虑到下面的模型,我一直在试图弄清楚如何使用Django REST框架返回我在下面想到的数据结构 这是如何在序列化程序中实现的,还是需要在使用传统Django样式查询的视图中构建这样的数据结构 关于 基本上,创建一个词,用户提交该词的定义,并对每个定义进行投票——最有趣、最悲伤、wtf等等 models.py 预期的查询结果结构Python DRF:序列化程序或视图中的数据结构?,python,django,django-rest-framework,Python,Django,Django Rest Framework,考虑到下面的模型,我一直在试图弄清楚如何使用Django REST框架返回我在下面想到的数据结构 这是如何在序列化程序中实现的,还是需要在使用传统Django样式查询的视图中构建这样的数据结构 关于 基本上,创建一个词,用户提交该词的定义,并对每个定义进行投票——最有趣、最悲伤、wtf等等 models.py 预期的查询结果结构 谢谢 您附加的模式可以而且应该使用Django REST框架序列化程序生成;可以使用嵌套序列化程序生成模式的嵌套元素。通常,这些序列化程序将从ModelSerializ
谢谢 您附加的模式可以而且应该使用Django REST框架序列化程序生成;可以使用嵌套序列化程序生成模式的嵌套元素。通常,这些序列化程序将从ModelSerializer继承 下面是一个嵌套序列化程序的示例,可用于开始构建架构:
class WordSerializer(serializers.ModelSerializer):
"""Serializer for a Word"""
definitions = DefinitionSerializer(many=True)
class Meta:
model = Word
fields = ('word', 'definitions')
class DefinitionSerializer(serializers.ModelSerializer):
"""Serializer for a Definition"""
user = UserSerializer(read_only=True)
votes = VoteSerializer(many=True)
class Meta:
model = Word
fields = ('definition', 'user', 'votes')
您列出的模式中可能更复杂的一部分是投票类别到投票计数的映射。DRF自然会创建一个对象列表结构,而不是模式中的单个对象。若要覆盖该行为,您可以查看。定义应该是一个列表,而不是一个命令,不是吗?@Michael:很好。我更新了示例。谢谢。事实上,选票类别到计票的地图是最复杂的部分。我所有的东西都在工作。欢迎提供帮助。如果不完全需要在单个JSON对象中对其进行编码,您可以将其表示为一个对象列表,其中一个属性表示投票类型,即有趣、悲伤等,另一个属性表示计数。这就是我解决这个问题的办法。如果答案解决了你的问题,你可以接受它,让别人知道你的问题已经得到了回答。希望有帮助!
word: 'hello',
definitions: [
{
user: 'alice',
definition: 'an expression of greeting',
votes: {
funny: 3,
sad: 1,
wtf: 7
},
votes_total: 11
},
etc...
]
class WordSerializer(serializers.ModelSerializer):
"""Serializer for a Word"""
definitions = DefinitionSerializer(many=True)
class Meta:
model = Word
fields = ('word', 'definitions')
class DefinitionSerializer(serializers.ModelSerializer):
"""Serializer for a Definition"""
user = UserSerializer(read_only=True)
votes = VoteSerializer(many=True)
class Meta:
model = Word
fields = ('definition', 'user', 'votes')