Problema en la consulta de campos relacionados profundamente anidados en el serializador de Django.
Tengo modelos anidados que se relacionan entre sí y que se ven así:
class User(models.Model):
username = models.CharField(max_length=20)
...
class Workspace(models.Model):
...
class Folder(models.Model):
workspace = models.ForeignKey(Workspace, on_delete=models.CASCADE)
class File(models.Model):
folder = models.ForeignKey(Folder, on_delete=models.CASCADE)
class Member(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
workspace = models.ForeignKey(Workspace, related_name="members", on_delete=models.CASCADE)
class Post(models.Model):
file = models.ForeignKey(File, on_delete=models.CASCADE)
Mi pregunta es: ¿Cómo puedo obtener un resultado de consulta para Post que se vea así?
{
"id": 1,
"file": 2,
"members": [1, 2, 3]
}
Intenté usar SlugRelatedField en el serializador, pero no pude hacerlo correctamente.
davy.ai
Para obtener un resultado de consulta de publicación como el que desea, puede utilizar un serializador personalizado con un
MemberSerializer
anidado para acceder al objetoUser
y recuperar solo el atributoid
. Aquí le mostramos cómo puede modificar su código:En el
PostSerializer
, agregamos un campomembers
que es unSerializerMethodField
. Este campo llama al métodoget_members()
para llenar su valor. En el métodoget_members()
, usamos unMemberSerializer
para recuperar una lista de objetosMember
para elEspacio de trabajo
relacionado con el objetoFile
en la publicación. Luego solo devolvemos la lista de valoresid
de estos objetosMember
.