Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

549
Vistas
Django rest framework no puede tratar con múltiples objetos en el conjunto de vistas del modelo

Tengo un modelo muy simple y su serializador y vistas relacionados:

 class Page(models.Model): user = models.ForeignKey(User) title = models.CharField(max_length=255) pub_date = models.DateTimeField(default=timezone.now) class PageSerializer(serializers.ModelSerializer): class Meta: model = Page fields = ('user', 'title', 'pub_date') class PageViewSet(viewsets.ModelViewSet): queryset = Page.objects.all() serializer_class = PageSerializer

Ahora puedo publicar así:

 { "user": 1, "title": "Lorem ipsum" }

Esto funciona bien. Pero me gustaría publicar varios objetos como este:

 [ { "user": 1, "title": "Lorem ipsum one" }, { "user": 1, "title": "Lorem ipsum two" } ]

Pero esto me da un error:

"non_field_errors": [

 "Invalid data. Expected a dictionary, but got list."

]

Entonces, para aceptar múltiples objetos, modifiqué la vista según el documento :

 class PageViewSet(viewsets.ModelViewSet): queryset = Page.objects.all() serializer_class = PageSerializer(queryset, many=True)

Pero estoy recibiendo un error:

Error de tipo en /api/blog/pages/

El objeto 'ListSerializer' no se puede llamar

¿Que me estoy perdiendo aqui?

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Lo tenía configurado correctamente antes, serializer_class debería apuntar a la clase de esta manera:

 serializer_class = PageSerializer

Tenías razón en el error, no le gusta recibir múltiples objetos en el POST. Una forma de solucionarlo sería anular el método get_serializer en la vista, agregando many=True allí.

Algo como:

 def get_serializer(self, *args, **kwargs): if "data" in kwargs: data = kwargs["data"] # check if many is required if isinstance(data, list): kwargs["many"] = True return super(PageViewSet, self).get_serializer(*args, **kwargs)

Para responder a su pregunta en los comentarios: isinstance() es un método de Python para verificar el tipo de un objeto. En este caso, es una list cuando se pasan varios objetos, por lo que solo verificamos qué tipo data son y establecemos many=true si se trata de una list .

Documentos DRF con respecto a get_serializer (bajo métodos)

Documentos de Python sobre isinstance

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda