Nehmen wir an, wir haben das folgende Modell:
class Classroom(models.Model):
room_number = [....]
class Teacher(models.Model):
name = [...]
tenure = [...]
classroom = models.ForeignKey(Classroom)
Nehmen wir an, anstatt ein solches Ergebnis mit der Funktion ManyRelatedPrimaryKeyField zu erhalten:
{
"room_number": "42",
"teachers": [
27,
24,
7
]
},
Lassen Sie es etwas zurückgeben, das die vollständige zugehörige Modelldarstellung enthält, wie:
{
"room_number": "42",
"teachers": [
{
'id':'27,
'name':'John',
'tenure':True
},
{
'id':'24,
'name':'Sally',
'tenure':False
},
]
},
Ist das möglich? Wenn das so ist, wie? Und ist das eine schlechte Idee?
depth
in diesem Fall nicht das getan wird, was Sie benötigen, und um zu erklären, welche Ausnahme Sie sehen und wie Sie damit umgehen.many=True
wie so...TeacherSerializer(source='teacher_set', many=True)
. Ansonsten bekam ich folgenden Fehler:The serializer field might be named incorrectly and not match any attribute or key on the 'RelatedManager' instance. Original exception text was: 'RelatedManager' object has no attribute 'type'.
..._set
standardmäßig benannt. Weitere Informationen finden Sie in den Django-Dokumenten: docs.djangoproject.com/de/1.10/ref/models/relations/…Danke @TomChristie !!! Sie haben mir sehr geholfen! Ich möchte das ein wenig aktualisieren (wegen eines Fehlers, auf den ich gestoßen bin)
quelle
Dies kann auch erreicht werden, indem ein ziemlich praktischer Dandy-Django verwendet wird, der als drf-flex-Felder bezeichnet wird . Wir benutzen es und es ist ziemlich großartig. Sie installieren es einfach
pip install drf-flex-fields
, führen es durch Ihren Serializer, fügen es hinzuexpandable_fields
und Bingo (Beispiel unten). Außerdem können Sie mithilfe der Punktnotation tief verschachtelte Beziehungen angeben.Dann fügen Sie
?expand=teacher_set
Ihrer URL hinzu und es wird eine erweiterte Antwort zurückgegeben. Hoffe, das hilft jemandem eines Tages. Prost!quelle