Iniziamo dai modelli utilizzati nei documenti django sulla relazione M2M che utilizza l'argomento through per indicare il modello che fungerà da intermediario.Come lavorare con la relazione M2M in django-rest
class Person(models.Model):
name = models.CharField(max_length=128)
def __unicode__(self):
return self.name
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person,
through='Membership')
def __unicode__(self):
return self.name
class Membership(models.Model):
person = models.ForeignKey(Person)
group = models.ForeignKey(Group)
date_joined = models.DateField()
class Meta:
ordering = ['date_joined']
Si supponga ora voglio riposare lettura-scrittura vista per il modello di Gruppo che contiene anche tutta la persona all'interno di ogni gruppo, ordinato dal campo date_joined. La serializzazione JSON vorrei ottenere è il seguente (i membri sono descritti solo con il loro id):
{
"id": 1,
"name": "U2",
"members": [
20,
269,
134,
12,
]
}
ho scritto un serializzatore:
class GroupSerializer(serializers.ModelSerializer):
members = serializers.SlugRelatedField(source='membership_set',
many=True,
read_only=False,
slug_field='person_id',
required=True)
class Meta:
model = Group
fields = ('id', 'name', 'members')
Mentre per le operazioni di lettura funziona bene, non per scrivere Come devo definire il serializzatore in modo tale che, data la serializzazione sopra definito, si procederà da:
- Creare l'oggetto Gruppo
- Aggiungi ciascuno membri al gruppo (con la creazione di un oggetto appartenenza)
Grazie per la risposta chiara che mi ha fornito anche il collegamento alla parte pertinente della documentazione o la risposta dell'autore sul punto. È un peccato che quello che stavo cercando di fare non sia molto supportato dal framework. Potresti per favore suggerirmi un modo per portare a termine il compito scrivendo il codice da solo? Qual è la strada giusta? Grazie ancora! – Dragster
Sono felice di poterti aiutare :) Per quanto riguarda la parte di creazione, puoi farlo in due punti: nel metodo ** post/crea ** o nel metodo ** post_save **. Suggerisco di farlo nel ** post_save ** perché ciò significa che stai permettendo al framework di creare l'oggetto Group e tutto ciò che resta da fare è aggiungere i membri. Modificherò la mia risposta con un piccolo snippet di codice su come usare questo metodo. – AdelaN
Grazie mille, il vostro supporto è molto apprezzato! – Dragster