Katakanlah kita memiliki model berikut:
class Classroom(models.Model):
room_number = [....]
class Teacher(models.Model):
name = [...]
tenure = [...]
classroom = models.ForeignKey(Classroom)
Katakanlah alih-alih mendapatkan hasil seperti ini per fungsi ManyRelatedPrimaryKeyField:
{
"room_number": "42",
"teachers": [
27,
24,
7
]
},
minta itu mengembalikan sesuatu yang mencakup representasi model terkait penuh seperti:
{
"room_number": "42",
"teachers": [
{
'id':'27,
'name':'John',
'tenure':True
},
{
'id':'24,
'name':'Sally',
'tenure':False
},
]
},
Apakah ini mungkin? Jika ya, bagaimana caranya? Dan apakah ini ide yang buruk?
depth
tidak melakukan apa yang Anda butuhkan dalam kasus ini, dan untuk menjelaskan pengecualian yang Anda lihat dan cara mengatasinya.many=True
seperti itu...TeacherSerializer(source='teacher_set', many=True)
. Kalau tidak, saya mendapatkan kesalahan berikut: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
secara default. Lihat dokumen Django untuk detail lebih lanjut: docs.djangoproject.com/en/1.10/ref/models/relations/…@TomChristie terima kasih !!! Anda banyak membantu saya! Saya ingin memperbarui itu sedikit (karena kesalahan yang saya alami)
sumber
Ini juga dapat dicapai dengan menggunakan django keren yang sangat menarik yang disebut dengan drf-flex-fields . Kami menggunakannya dan itu sangat mengagumkan. Anda cukup menginstalnya
pip install drf-flex-fields
, meneruskannya melalui serializer Anda, tambahkanexpandable_fields
dan bingo (contoh di bawah). Ini juga memungkinkan Anda untuk menentukan hubungan bersarang yang mendalam dengan menggunakan notasi titik.Kemudian Anda menambahkan
?expand=teacher_set
ke URL Anda dan mengembalikan respons yang diperluas. Semoga ini bisa membantu seseorang, suatu hari nanti. Bersulang!sumber