Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python DRF:序列化程序或视图中的数据结构?_Python_Django_Django Rest Framework - Fatal编程技术网

Python DRF:序列化程序或视图中的数据结构?

Python DRF:序列化程序或视图中的数据结构?,python,django,django-rest-framework,Python,Django,Django Rest Framework,考虑到下面的模型,我一直在试图弄清楚如何使用Django REST框架返回我在下面想到的数据结构 这是如何在序列化程序中实现的,还是需要在使用传统Django样式查询的视图中构建这样的数据结构 关于 基本上,创建一个词,用户提交该词的定义,并对每个定义进行投票——最有趣、最悲伤、wtf等等 models.py 预期的查询结果结构 谢谢 您附加的模式可以而且应该使用Django REST框架序列化程序生成;可以使用嵌套序列化程序生成模式的嵌套元素。通常,这些序列化程序将从ModelSerializ

考虑到下面的模型,我一直在试图弄清楚如何使用Django REST框架返回我在下面想到的数据结构

这是如何在序列化程序中实现的,还是需要在使用传统Django样式查询的视图中构建这样的数据结构

关于

基本上,创建一个词,用户提交该词的定义,并对每个定义进行投票——最有趣、最悲伤、wtf等等

models.py

预期的查询结果结构


谢谢

您附加的模式可以而且应该使用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')