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

228
Views
¿Cómo mostrar un valor de clave externa en lugar de la identificación?

Tengo los siguientes modelos:

 class FlightSchedule(models.Model): tail_number = models.ForeignKey(TailNumber, null=False) flight_number = models.CharField(max_length=30, null=False) flight_group_code = models.ForeignKey(FlightGroup, null=False) origin_port_code = models.ForeignKey(Port, null=False, related_name="Origin") destination_port_code = models.ForeignKey(Port, null=False, related_name="Destination") flight_departure_time = models.TimeField() start_date = models.DateField() end_date = models.DateField() def __unicode__(self): return u'%s' % self.flight_number class Meta: verbose_name_plural = "Flight Schedule" class FlightScheduleDetail(models.Model): flight_date = models.CharField(max_length=30, null=False) flight_number = models.ForeignKey(FlightSchedule, null=False, related_name="flight_number_schedule") route_id = models.CharField(max_length=30, null=False, unique=True) flight_status = models.ForeignKey(Status, null=True, default=1) def __unicode__(self): return u'%s' % self.route_id class Meta: verbose_name_plural = "Flight Schedule Details"

y el serializador es el siguiente:

 class FlightScheduleDetailSerializer(serializers.ModelSerializer): class Meta: model = FlightScheduleDetail fields = '__all__' class FlightScheduleSerializer(serializers.ModelSerializer): flight_number_schedule = FlightScheduleDetailSerializer(many=True) class Meta: model = FlightSchedule fields = ['tail_number', 'flight_number', 'origin_port_code', 'destination_port_code', 'flight_departure_time', 'flight_number_schedule']

Aquí tail_number , flight_number es una clave foránea. Cuando creo una API, obtengo la respuesta como la identificación de los campos. ¿Cómo puedo mostrar el nombre en el json?

Mi views.py es el siguiente:

 @api_view(['GET']) def flight_schedule(request): schedule = FlightSchedule.objects.all() serializer = FlightScheduleSerializer(schedule, many=True) return Response(serializer.data)
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Puede definir la fuente con field_name en su serializador de la siguiente manera.

He usado source='TailNumber.number' . Por favor, utilice el nombre de campo correcto en lugar del number

 class UserProfileSerializer(serializers.ModelSerializer): tail_number = serializers.CharField(source='TailNumber.number', read_only=True) flight_number = ....(change as above) class Meta: model = FlightSchedule fields = ['tail_number', 'flight_number', 'origin_port_code', 'destination_port_code', 'flight_departure_time', 'flight_number_schedule']
over 4 years ago · Santiago Trujillo Report

0

Simplemente podría agregarlos como si fueran atributos.

 flight_number_str = serializers.ReadOnlyField(source='flight_number.flight_number')

Primero flight_number es el atributo de FlightScheduleDetail , luego el de FlightSchedule

y luego agregarlo a la lista de campos fields = [..., 'flight_number_str']

De lo contrario, puede echar un vistazo a las relaciones anidadas en DRF que también pueden ofrecer más posibilidades.

over 4 years ago · Santiago Trujillo Report

0

Otra alternativa es utilizar la opción de depth en un serializador. Es para especificar serialización anidada - doc

 class AccountSerializer(serializers.ModelSerializer): class Meta: model = Account fields = ('id', 'account_name', 'users', 'created') depth = 1

Si los usuarios son una clave externa o una clave de muchos a muchos, el serializador mostrará a los usuarios como un objeto y no como una clave.

La opción de depth debe establecerse en un valor entero que indique la profundidad de las relaciones que deben atravesarse antes de volver a una representación plana.

over 4 years ago · Santiago Trujillo 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!