在django rest框架中为json响应组合多个表

时间:2017-05-04 05:29:51

标签: python json django rest django-rest-framework

我正在为我的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 格式进行回复,如下所示:

[{
    "daily_details": [
        {
            "date": "12/06/2017",
            "route_id": 123456
        },
        {
            "date": "13/06/2017",
            "route_id": 123457
        }
    ],
    "flight_schedule": {
        "tail-number": "tailnumber1",
        "flight_number": "flightnumber1",
        "flight_group_code": "code1",
        "origin_port_code": "MUM",
        "destination_port_code": "BLR",
        "leg_details": [
            {
                "origin_port_code": "MUM",
                "destination_port_code": "GOA",
                "sequence_number": 1
            },
            {
                "origin_port_code": "MUM",
                "destination_port_code": "BLR",
                "sequence_number": 2
            }
        ]
    }
}]

序列化程序:

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

0 个答案:

没有答案