我正在为我的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']