Powiedzmy, że mamy następujący model:
class Classroom(models.Model):
room_number = [....]
class Teacher(models.Model):
name = [...]
tenure = [...]
classroom = models.ForeignKey(Classroom)
Powiedzmy, że zamiast otrzymać taki wynik za pomocą funkcji ManyRelatedPrimaryKeyField:
{
"room_number": "42",
"teachers": [
27,
24,
7
]
},
niech zwróci coś, co zawiera pełną reprezentację modelu, na przykład:
{
"room_number": "42",
"teachers": [
{
'id':'27,
'name':'John',
'tenure':True
},
{
'id':'24,
'name':'Sally',
'tenure':False
},
]
},
czy to możliwe? Jeśli tak to jak? Czy to zły pomysł?
depth
nie zrobiłbyś tego, czego potrzebujesz w tym przypadku, oraz aby wyjaśnić wyjątek, który widzisz, i jak sobie z nim radzić.many=True
sposób...TeacherSerializer(source='teacher_set', many=True)
. W przeciwnym razie otrzymywałem następujący błąd: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
domyślnie nazwana . Zobacz dokumentację Django, aby uzyskać więcej informacji: docs.djangoproject.com/en/1.10/ref/models/relations/ ...Dziękuję @TomChristie !!! Bardzo mi pomogłeś! Chciałbym to trochę zaktualizować (z powodu błędu, który wpadłem)
źródło
Można to również osiągnąć za pomocą całkiem poręcznego, eleganckiego django, zwanego drf-flex-fields . Używamy go i jest niesamowity. Po prostu instalujesz
pip install drf-flex-fields
, przepuszczasz przez swój serializator, dodajeszexpandable_fields
i bingo (przykład poniżej). Umożliwia także określenie głęboko zagnieżdżonych relacji przy użyciu notacji kropkowej.Następnie dodajesz
?expand=teacher_set
do swojego adresu URL i zwraca on rozszerzoną odpowiedź. Mam nadzieję, że kiedyś komuś to pomoże. Twoje zdrowie!źródło