API de Wagtail: cómo exponer fragmentos y serializar datos anidados
El problema es el siguiente, he creado un fragmento de código y quiero exponerlo, pero no sé cómo serializar datos anidados. Aquí está mi código:
models.py
@register_snippet
class TeamMember(ClusterableModel):
name = models.CharField(max_length=80)
description = models.CharField(max_length=80)
panels = [
FieldPanel('name'),
InlinePanel('tasks', label=('Tasks')),
]
class Task(Orderable):
team_member = ParentalKey('adm.TeamMember', related_name="tasks")
task_name = models.CharField(max_length=80)
endpoints.py
class TeamMemberAPIEndpoint(BaseAPIViewSet):
model = TeamMember
body_fields = BaseAPIViewSet.body_fields + [
'name',
'description',
'tasks',
]
listing_default_fields = BaseAPIViewSet.listing_default_fields = [
'name',
'description',
'tasks',
]
El resultado es:
"items": [
{
"name": "equipo de python",
"description": "",
"tasks": [
{
"id": 1,
"meta": {
"type": "adm.Task"
}
},
{
"id": 2,
"meta": {
"type": "adm.Task"
}
}
]
}
¿Cómo puedo resolver este problema?
davy.ai
Para serializar datos anidados en Django, puedes usar los serializadores del Marco de Rest de Django.
En primer lugar, debes importar los serializadores en tu archivo endpoints.py:
Luego, puedes crear un serializador anidado para el modelo Task:
A continuación, puedes modificar el TeamMemberAPIEndpoint para usar el TaskSerializer para el campo tasks:
Finalmente, puedes actualizar los atributos body_fields y listing_default_fields para eliminar ‘tasks’ ya que se incluirá en el serializador anidado.
Al usar el NestedTaskSerializer, la respuesta JSON se verá así:
Esto te permite serializar correctamente datos anidados en Django Rest Framework.