Wie schließe ich verwandte Modellfelder mit Django Rest Framework ein?
Sagen wir, wir haben das folgende Modell:
class Classroom(models.Model):
room_number = [....]
class Teacher(models.Model):
name = [...]
tenure = [...]
classroom = models.ForeignKey(Classroom)
Angenommen, dass anstelle von einem Ergebnis wie diesem pro die ManyRelatedPrimaryKeyField Funktion:
{
"room_number": "42",
"teachers": [
27,
24,
7
]
},
haben Sie etwas zurücksenden, enthält den vollständigen zugehörigen Modell-Darstellung wie:
{
"room_number": "42",
"teachers": [
{
'id':'27,
'name':'John',
'tenure':True
},
{
'id':'24,
'name':'Sally',
'tenure':False
},
]
},
Ist das möglich? Wenn ja, wie? Und ist das eine schlechte Idee?
InformationsquelleAutor der Frage Chaz | 2013-01-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der einfachste Weg ist die Tiefe argument
Jedoch, dass nur Beziehungen, die für vorwärts-Beziehungen, die in diesem Fall nicht ganz das, was Sie brauchen, da die Lehrer Feld ist eine umgekehrte Beziehung.
Wenn Sie haben mehr komplexe Anforderungen (zB. zählen reverse-Beziehungen, nest einige Felder, andere aber nicht, oder nest nur eine bestimmte Teilmenge der Felder) können Sie nest serialisierungsprogrammeeg...
Beachten Sie, dass wir die source-argument, auf der serializer-Feld angeben, das Attribut zu verwenden, als die Quelle des Feldes. Wir könnten fallen die
source
argument, indem Sie stattdessen dafür, dass dieteachers
- Attribut vorhanden ist, mit der related_name - option auf IhremTeacher
Modell, dh.classroom = models.ForeignKey(Classroom, related_name='teachers')
Eine Sache im Auge zu behalten ist, dass verschachtelte serialisierungsprogramme derzeit nicht unterstützt schreib-Operationen. Für beschreibbare Darstellungen verwenden, sollten Sie regelmäßige flache Darstellungen, wie pk-oder hyperlinking.
InformationsquelleAutor der Antwort Tom Christie
Danke @TomChristie!!!
Sie haben mir sehr geholfen!
Ich möchte zu aktualisieren, die ein wenig (weil der eine Fehler, den ich lief in)
InformationsquelleAutor der Antwort Eliyahu Tauber