2016-04-19 241 views
0

我在使用Django和restdjangoframework一个多对多关系

我在那里Serializer.py我写我的所有序列化类是一个项目的Django的restframework系列化,我做了一个外键和的系列化OnetoOnefield但我不知道如何做一个多对多关系

这里的序列化是我的代码为例:

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 

我还需要知道,如果我必须在毕业文凭的关系添加多对多向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

如果你想序列化多对多场,只写串行器,你会为一个OneToOne,但增加了many=True kwarg。 如果你想以特殊的方式序列化它们,例如在这里,字段'diplome'被序列化为所有diplome的数量,你可以使用SerializerMethodField

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