Django Rest框架中的自定义词典

2024-09-26 22:49:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试过这样的JSON:

{
        "course_name": "name",
        "course_id": "44",
        "icon": 1,
        "published_at":"2014-10-23T03:15:54Z",
        "skills": {
            "self":[
                {
                    "skill_name": "Cuidado Emocional",
                    "points": 5,
                },
                {
                    "skill_name": "Cuidado Físico",
                    "points": 5,
                }
            ],
            "abilities":[
                {
                    "skill_name": "Principios Básicos",
                    "points":5,
                },
                {
                    "skill_name": "Administración",
                    "points": 5,
                }
            ]

        },

如果技能字典中有一个字段是“可用性类型”,我想按“类型能力”分组:

这是我的模型

^{pr2}$

我尝试过创建这样的序列化程序

class AbilitySerializer(serializers.ModelSerializer):
    dictAutoCuidado = {}
    dictHabilidades = {}

    class Meta:
        model = Ability
        fields = ('ability', 'points')

    def to_native(self, value):
        if value.ability_type == 'AU':
            self.dictAutoCuidado.update({
                'skill_name': value.ability,
                'points': value.points
            })
        else:
            self.dictHabilidades.update({
                'skill_name': value.ability,
                'points': value.points
            })

        return {
            'self': self.dictAutoCuidado,
            'ability': self.dictHabilidades
        }


class CourseListSerializer(serializers.ModelSerializer):
    author = serializers.RelatedField(source='author.name')
    objectives = serializers.RelatedField(many=True)
    abilities = AbilitySerializer(many=True)

    class Meta:
        model = Course
        fields = (
            'id',
            'title',
            'description',
            'objectives',
            'abilities',
        )

但是当我重新加载页面时,JSON是

{
    "id": 1, 
    "title": "La vida es bella", 
    "created_at": "2014-10-23T02:06:21Z", 
    "abilities": [
        {
            "self": {
                "points": 100, 
                "skill_name": "Habilidad 1"
            }, 
            "ability": {
                "points": 250, 
                "skill_name": "Habilidad 2"
            }
        }, 
        {
            "self": {
                "points": 100, 
                "skill_name": "Habilidad 1"
            }, 
            "ability": {
                "points": 250, 
                "skill_name": "Habilidad 2"
            }
        }, 
        {
            "self": {
                "points": 100, 
                "skill_name": "Habilidad 1"
            }, 
            "ability": {
                "points": 250, 
                "skill_name": "Habilidad 2"
            }
        }
    ]
}

而且这些能力并不是我想要的那样分组。你能告诉我我做错什么了吗?还有一个解决办法吗?我试过用一些查询集,但是没有用。我试图重写init方法,但我没有找到按我想要的方式返回自定义dictural group by。在

谢谢。在


Tags: nameselfidjsonvalueskillpointsclass

热门问题