Digamos que temos o seguinte modelo:
class Classroom(models.Model):
room_number = [....]
class Teacher(models.Model):
name = [...]
tenure = [...]
classroom = models.ForeignKey(Classroom)
Digamos que, em vez de obter um resultado como este pela função ManyRelatedPrimaryKeyField:
{
"room_number": "42",
"teachers": [
27,
24,
7
]
},
retorne algo que inclua a representação completa do modelo relacionado, como:
{
"room_number": "42",
"teachers": [
{
'id':'27,
'name':'John',
'tenure':True
},
{
'id':'24,
'name':'Sally',
'tenure':False
},
]
},
Isso é possível? Se sim, como? E isso é uma má ideia?
depth
que não faria o que você precisa neste caso e para explicar a exceção que está vendo e como lidar com isso.many=True
assim...TeacherSerializer(source='teacher_set', many=True)
. Caso contrário, eu estava recebendo o seguinte erro: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 padrão. Veja a documentação do Django para mais detalhes: docs.djangoproject.com/en/1.10/ref/models/relations/...Obrigado @TomChristie !!! Você me ajudou muito! Gostaria de atualizar um pouco (por causa de um erro que encontrei)
fonte
Isso também pode ser feito usando um django dandy bastante útil chamado drf-flex-fields . Nós o usamos e é incrível. Você acabou de instalar
pip install drf-flex-fields
, passar pelo serializador, adicionarexpandable_fields
e bingo (exemplo abaixo). Ele também permite que você especifique relacionamentos aninhados profundos usando a notação de ponto.Então você adiciona
?expand=teacher_set
ao seu URL e ele retorna uma resposta expandida. Espero que isso ajude alguém, algum dia. Felicidades!fonte