Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

181
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!