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

246
Vistas
¿Es posible cambiar dinámicamente el nombre del campo dentro del serializador django-rest-framework?

Tengo modelos Product y ProductCategory .

Digamos que tengo ProductCategory TV , que tiene Sony , Samsung como sus productos. También tengo la categoría MobilePhone con Apple y Nokia como sus productos. Usando DRF, me gustaría obtener una salida JSON usando serializadores, que es similar a la siguiente:

 { 'TV': [ 'Sony': { 'price': '$100', 'country': 'Japan', }, 'Samsung': { 'price': '$110', 'country': 'Korea', } ] 'mobile_phone': [ 'Apple': { 'price': '$300', 'country': 'USA', }, 'Nokia': { 'price': '$210', 'country': 'Finland', } ] }

El problema aquí es que los nombres de los campos ('TV', 'mobile_phone') en el serializador tienen que ser dinámicos.

Sé que puedo obtener el siguiente tipo JSON

 { [ { 'product_category': 'TV', 'manufacturer: 'Sony', 'price': '$100', 'country': 'Japan', }, { 'product_category': 'TV', 'manufacturer: 'Samgsung', 'price': '$110', 'country': 'Korea', } ] [ { 'product_category': 'mobile_phone', 'manufacturer: 'Samgsung', 'price': '$300', 'country': 'USA', }, { 'product_category': 'mobile_phone', 'manufacturer: 'Apple', 'price': '$210', 'country': 'Finland', } ] }

con

 class CategorySerializer(serializers.Serializer): product_category = serializer.CharField() manufacturer = serializer.CharField() price = serializer.CharField() country = serializer.CharField()

Pero los nombres de campo que cambian dinámicamente son difíciles de lograr. ¿Hay alguna manera de que pueda hacer esto?

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

0

Puede admitir este tipo de formato personalizado anulando to_representation de su serializador y del ListSerializer predeterminado :

  1. Primero, anula to_representation de su serializador:

     class CategorySerializer(serializers.Serializer): # your fields here def to_representation(self, obj): return { obj.manufacturer: { 'price': obj.price, 'country': obj.country } }

    Para que sus categorías serializadas sean de esta forma:

     { 'Sony': { 'price': '$100', 'country': 'Japan' } }
  2. Luego, para anteponer product_category delante de su lista, puede usar un ListSerializer personalizado con una to_representation personalizada:

     class CategoryListSerializer(serializers.ListSerializer): def to_representation(self, data): # Group your data entries by category here ... return { 'TV': tv_data 'mobile_phone': mobile_data } class CategorySerializer(serializers.Serializer): ... class Meta: list_serializer_class = CategoryListSerializer
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