Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

187
Visualizações
DjangoRestFramework y Javascript: Obtener datos adicionales

Me gustaría preguntar si es posible crear una respuesta con datos relacionados de un segundo modelo. Por ejemplo:

modelos.py

 class Manufacturer(models.Model): name = models.CharField(max_length=100, null=False, blank=False, unique=True) date_created = models.DateTimeField(auto_now_add=True) class Car(models.Model): manufacturer = models.ForeignKey(Manufacturer, null=False, blank=False, on_delete=models.CASCADE) name = models.CharField(max_length=100, null=False, blank=False) date_created = models.DateTimeField(auto_now_add=True)

serializadores.py

 class ManufacturerSerializer(ModelSerializer): class Meta: model = Manufacturer exclude = [ 'date_created', ] class CarSerializer(ModelSerializer): class Meta: model = Car exclude = [ 'date_created', ]

vistas.py

 @api_view(['GET']) def api_list_manufacturer(request): qs = Manufacturer.objects.all() serializer = ManufacturerSerializer(qs, many=True) return Response(serializer.data) @api_view(['GET']) def api_list_card(request): qs = Car.objects.all() serializer = CarSerializer(qs, many=True) return Response(serializer.data)

Ahora sé que estoy usando el método fetch para recibir los datos del automóvil ...

 fetch(url) .then(response => response.json) .then(function(data) { console.log(data); });

... y los datos se ven así:

 0: {id: 1, name: 'Focus', manufacturer: 1}, 1: {id: 2, name: 'F-150', manufacturer: 1}, 2: {id: 3, name: 'Model S', manufacturer: 2}

Mi pregunta:

¿Es posible obtener, por ejemplo, el nombre del fabricante en mi respuesta? ¿Algo como esto?

 0: {id: 1, name: 'Focus', manufacturer: 1, manufacturer__name: 'Ford'}, 1: {id: 2, name: 'F-150', manufacturer: 1, manufacturer__name: 'Ford'}, 2: {id: 3, name: 'Model S', manufacturer: 2, manufacturer__name: 'Tesla'}

¡Gracias por toda su ayuda y que tengan un excelente domingo!

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Utilice SerializerMethodField . Este es un campo de sólo lectura. Obtiene su valor llamando a un método en la clase de serializador a la que está adjunto. Se puede usar para agregar cualquier tipo de datos a la representación serializada de su objeto

Dentro de serializers.py agregue:

 from rest_framework.serializers import SerializerMethodField class CarSerializer(ModelSerializer): manufacturer__name = SerializerMethodField(help_text="Name of the Car Manufacturer") class Meta: model = Car fields = [ 'id', 'name', 'manufacturer', 'manufacturer__name', ] def get_manufacturer__name(self, instance: Car): return instance.manufacturer.name
about 4 years ago · Juan Pablo Isaza Relatório

0

OK,

así que encontré la solución! Dentro de mi serializers.py cambié el del auto por este:

 class CarSerializer(ModelSerializer): manufacturer_name = CharField(source='manufacturer.name') class Meta: model = Car exclude = [ 'date_created', ]
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda