Python Django Rest框架中的自定义词典

Python Django Rest框架中的自定义词典,python,django,django-rest-framework,Python,Django,Django Rest Framework,我已经尝试过获得如下JSON: { "course_name": "name", "course_id": "44", "icon": 1, "published_at":"2014-10-23T03:15:54Z", "skills": { "self":[ { "skill_name": "Cuidado Emocio

我已经尝试过获得如下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,
                }
            ]

        },
如果技能词典有一个类型为“能力”的字段,我想按类型“能力”进行分组:

这是我的模型

class Ability(models.Model):
    ability = models.CharField("Habilidad", max_length=255)
    ability_type = models.CharField('Tipo', max_length=2, choices=ABILITY_TYPE)
    course = models.ForeignKey(Course, related_name='abilities')
    points = models.PositiveIntegerField()
    active = models.BooleanField("Activo", default=True)
    created_at = models.DateTimeField("Creado en", auto_now_add=True)
    updated_at = models.DateTimeField("Actualizado a las", auto_now=True)

    class Meta:
        verbose_name = u'Habilidad'
        verbose_name_plural = u"Habilidades"
        ordering = ["-created_at"]

    def __unicode__(self):
        return self.ability
我尝试过创建这样的序列化程序

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"
            }
        }
    ]
}
而且这些能力并不是我想要的分组。你能告诉我我做错了什么以及解决这个问题的方法吗?我试过一些queryset,但不起作用。我试图重写init方法,但没有找到返回自定义口述分组的方法


谢谢。

我想这些字段应该是

dictAutoCuidado = serializers.DictField()
dictHabilidades = serializers.DictField()

链接:

应该是只读服务,还是要插入/更新条目?因为如果您正在创建一个只读web服务,SerializerMethodField可以满足您的需要。只需只读即可。我将做一项关于这个领域的研究