Django restframework序列化了ManytoMany关系

时间:2016-04-19 13:50:33

标签: django serialization django-rest-framework

我正在使用Django和restdjangoframework

的项目

我在我的Serializer.py中编写了所有序列化类,我编写了一个foreignKey和OnetoOnefield的序列化,但我还不了解如何对ManytoMany关系进行序列化

这是我的代码的例子:

class CV(models.Model):
    numtel = models.IntegerField(blank=False,null=False)
    datecv= models.DateTimeField(auto_now = True,blank=False,null=False)
    pathcv = models.TextField(blank=False,null=False)
    compteCand = models.OneToOneField('CompteCandidat',related_name="infocand")
    diplome = models.ManyToManyField('Diplome', related_name="infoDiplome", blank=True)
    #######################################################
    def __str__(self):
        return self.numtel
    def __CVs__(self):
        return self.compteCand.all()



class Diplome(Competence):
    type=models.TextField(blank=False,null=False)
    domaine=models.TextField(blank=False,null=False)
    specialite=models.TextField(blank=False,null=False)
    annee=models.DateTimeField(auto_now = False,blank=False,null=False)
    #######################################################
    def __str__(self):
        return self.type
        return self.domaine
        return self.specialite
        return self.annee

我还需要知道我是否必须在Diplome中加入ManytoMany与CV的关系

我是否编写了这样的序列化类:

class CVSerializer(serializers.ModelSerializer):
    infocand= CompteCandidatSerializer(many=False,read_only=True)
    infoDiplomee=CompetenceSerializer(many=True,read_only=True)
    class Meta:
        model =CV
        fields=('first_name','last_name','email','numtel','infocand','infoDiplome')

class DiplomeSerializer(serializers.ModelSerializer):
    class Meta:
        model =Diplome
        fields=
(....??)

1 个答案:

答案 0 :(得分:1)

如果要序列化ManyToMany字段,只需像编写OneToOne一样编写序列化程序,但添加many=True kwarg。 如果你想以一种特殊的方式对它们进行序列化,例如在这里,字段'diplome'被序列化为所有diplomes的计数,你可以使用SerializerMethodField

哦,你的CVSerializer中的infoDiplomee!= infoDiplome字段。