在django中以一对一的关系序列化对象和父项

时间:2017-05-06 17:34:47

标签: django

我有两个模型:域名和专业,域名是专业的外键:

class Domain(models.Model):
    name = models.CharField(max_length=50)

    def __str__(self):
        return self.name


class Speciality(models.Model):
    domain = models.ForeignKey(Domain, on_delete=models.CASCADE)
    name = models.CharField(max_length=50)

    def __str__(self):
        return self.name

在我的观点中,我对专业进行了过滤,因此我将获得一个包含所有专业及其域名的查询集,每个对象都是单独的。我想序列化以获得这样的东西:

{ object1 : { 'domain' : 'Computer science',
              'specialities' : { {'pk': '1', 'name':'Programming'},
                                 {'pk': '2', 'name':'Networking'} 
                               }
            },
  object2 : { 'domain' : 'Mathmatics',
              'specialities' : { {'pk': '3', 'name':'Algebra'},
                                 {'pk': '4', 'name':'Geometry'} 
                               }
            }
}

所以基本上,我想从孩子到父母的序列化,而不是我通常看到的:从父母到孩子。 我不能用django ModelSerializer来做到这一点。有没有办法,或者我应该手动完成。

1 个答案:

答案 0 :(得分:1)

可以使用ModelSerializers完成。

尝试这样的事情,

class SpecialitySerializer(serializers.ModelSerializer):

    class Meta:
        model = Speciality
        fields = '__all__'


class DomainSerializer(serializers.ModelSerializer):
    specialities = SpecialitySerializer(source='specialities', many=True)
    class Meta:
        model = Domain
        fields = ('name', 'specialities',)

使用DomainSerializer进行查询。

此外,您必须在专业模型中设置ForeignKey约束的related_name(这将是“专业”)。