在Django-rest-fram中组合多个表作为json响应

2024-03-28 09:50:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为我的serializers使用django rest框架。我需要创建一个web服务,它将三个表中的字段组合起来并给出一个json。在

我有以下三种型号:

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()
    # route_id = models.CharField(max_length=30, null=True)

    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)
    # tail_number = models.ForeignKey(FlightSchedule, null=False, related_name="tail_number_schedule")
    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"


class LegDetail(models.Model):

    route_id = models.ForeignKey(FlightScheduleDetail, null=False, related_name="route_id_leg_detail")
    origin_port_code = models.ForeignKey(Port, null=False, related_name="Origin_leg")
    destination_port_code = models.ForeignKey(Port, null=False, related_name="Destination_leg")
    sequence_number = models.IntegerField()

    def __unicode__(self):
        return u'%s' % self.route_id + " > " + str(self.sequence_number)

    class Meta:
        verbose_name_plural = "Flight Leg Details"

我需要以下格式的json响应:

^{pr2}$

序列化程序:

class LegDeatilSerializer(serializers.ModelSerializer):
    class Meta:
        model = LegDetail
        fields = '__all__'


class FlightScheduleSerializer(serializers.ModelSerializer):
    tail_number_str = serializers.CharField(source='tail_number.tail_number', read_only=True)
    origin_str = serializers.CharField(source='origin_port_code.port_code', read_only=True)
    destination_str = serializers.CharField(source='destination_port_code.port_code', read_only=True)
    route_id_leg_detail = LegDeatilSerializer(many=True)

    class Meta:
        model = FlightSchedule
        fields = ['tail_number_str', 'origin_str', 'destination_str', 'route_id_leg_detail']


class FlightScheduleMainSerializer(serializers.ModelSerializer):
    # flight_number_str = serializers.CharField(source='flight_number.flight_number', read_only=True)
    # flight_number_schedule = FlightScheduleSerializer(many=True)

    class Meta:
        model = FlightScheduleDetail
        fields = ['flight_date', 'route_id']

Tags: nameidfalsetruenumberportmodelscode