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

223
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 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