Beginnen wir mit den Modellen in den Django-Dokumenten über die M2M-Beziehung, die das Argument through verwendet, um auf das Modell zu verweisen, das als Vermittler fungiert.Mit M2M-Beziehung in Django-Rest arbeiten
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']
wird nun angenommen, ich will eine Pause machen Lese-Schreib- Ansicht für das Gruppenmodell, das innerhalb jeder Gruppe auch alle die Person enthält, von date_joined Feld bestellt. Die Json Serialisierung Ich mag würde erhalten, ist die folgende (die Mitglieder nur mit ihrer ID beschrieben werden):
{
"id": 1,
"name": "U2",
"members": [
20,
269,
134,
12,
]
}
ich einen Serializer schrieb:
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')
Während für Leseoperationen es funktioniert gut, es nicht zum Schreiben. Wie soll ich den Serializer definieren, so dass die oben definierte Serialisierung gegeben, wird es durch vorgehen:
- die Objektgruppe erstellen
- jeweils Mitglieder der Gruppe hinzufügen (durch ein Mitgliedschaft-Objekt erstellen)
Vielen Dank für die klare Antwort, die Sie mir auch mit dem Link zum relevanten Teil der Dokumentation oder der Antwort des Autors auf den Punkt gegeben haben. Es ist schade, dass das, was ich versucht habe, vom Framework nicht sehr unterstützt wird. Könnten Sie mir bitte einen Weg vorschlagen, die Aufgabe zu erfüllen, indem Sie den Code selbst schreiben? Was ist der richtige Weg? Danke nochmal! – Dragster
Ich bin froh, dass ich helfen konnte :) Wie für die Erstellung Teil können Sie es an zwei Orten tun: in der ** post/create ** Methode oder in der ** post_save ** Methode. Ich schlage vor, es in ** post_save ** zu machen, weil das bedeutet, dass Sie zulassen, dass das Framework das Gruppenobjekt erstellt, und dass nur noch die Member hinzugefügt werden müssen. Ich werde meine Antwort mit einem kleinen Code-Snippet für die Verwendung dieser Methode bearbeiten. – AdelaN
Vielen Dank, Ihre Unterstützung wird sehr geschätzt! – Dragster