2016-04-19 3 views
0

Я на проект с помощью Django и restdjangoframeworkДжанго restframework Сериализация ManytoMany отношения

Я нахожусь в Serializer.py, где я написал все мои классы сериализации, я сделал сериализацию ForeignKey и а OnetoOnefield, но я не понимаю, как сделать сериализацию ManytoMany отношения

здесь является Exemple моего кода:

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

Если вы хотите сериализовать ManyToMany поля, просто написать сериалайзер как вы бы для OneToOne, но добавить many=True kwarg. Если вы хотите сериализовать их особым образом, например здесь, поле «diplome» сериализуется как количество всех diplomes, вы должны использовать SerializerMethodField.

О, и ваше поле infoDiplomee! = infoDiplome в вашем CVSerializer.

Смежные вопросы