我有两个模型:域名和专业,域名是专业的外键:
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来做到这一点。有没有办法,或者我应该手动完成。
答案 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(这将是“专业”)。