2016-04-19 286 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中。