Digamos que tenemos el siguiente modelo:
class Classroom(models.Model):
room_number = [....]
class Teacher(models.Model):
name = [...]
tenure = [...]
classroom = models.ForeignKey(Classroom)
Digamos que en lugar de obtener un resultado como este por la función ManyRelatedPrimaryKeyField:
{
"room_number": "42",
"teachers": [
27,
24,
7
]
},
que devuelva algo que incluya la representación completa del modelo relacionado, como:
{
"room_number": "42",
"teachers": [
{
'id':'27,
'name':'John',
'tenure':True
},
{
'id':'24,
'name':'Sally',
'tenure':False
},
]
},
es posible? ¿Si es así, cómo? ¿Y es esta una mala idea?
depth
qué no haría lo que necesita en este caso y para explicar la excepción que está viendo y cómo lidiar con eso.many=True
así...TeacherSerializer(source='teacher_set', many=True)
. De lo contrario, recibía el siguiente error: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
por defecto. Consulte los documentos de Django para más detalles: docs.djangoproject.com/en/1.10/ref/models/relations/…Gracias @TomChristie !!! ¡Me ayudaste mucho! Me gustaría actualizar eso un poco (debido a un error que encontré)
fuente
Esto también se puede lograr mediante el uso de un paquete Dandy Django bastante práctico llamado drf-flex-fields . Lo usamos y es bastante impresionante. Simplemente instale
pip install drf-flex-fields
, pase a través de su serializador, agregueexpandable_fields
y bingo (ejemplo a continuación). También le permite especificar relaciones anidadas profundas mediante la notación de puntos.Luego agrega
?expand=teacher_set
a su URL y devuelve una respuesta expandida. Espero que esto ayude a alguien, algún día. ¡Salud!fuente