【发布时间】:2021-06-19 01:38:28
【问题描述】:
我正在构建一个使用 django rest 框架的 Django 应用程序,它显示了用户给出的两个站点之间的公共汽车列表。为此,我想生成如下所示的 json 输出。
[
{
"id": 1,
"start_time": "09:48:52",
"end_time": "09:48:53",
"start_stop": "A",
"end_stop": "B",
"bus_in_route": "Bus1"
},
{
"id": 2,
"start_time": "10:00:00",
"end_time": "10:10:00",
"start_stop": "B",
"end_stop": "C",
"bus_in_route": "Bus2"
}
]
但我得到的是 ID 形式的输出。子模型(Bus、BusStop)中的字段值被替换为它们的 ID。
[
{
"id": 1,
"start_time": "09:48:52",
"end_time": "09:48:53",
"start_stop": 1,
"end_stop": 2,
"bus_in_route": 1
},
{
"id": 2,
"start_time": "10:00:00",
"end_time": "10:10:00",
"start_stop": 2,
"end_stop": 3,
"bus_in_route": 1
}
]
代码: models.py
class BusStop(models.Model): # model to store several bus stops
stop_name=models.CharField(max_length=255)
def __str__(self):
return str(self.stop_name)
class Bus(models.Model): # model to store names of several buses
bus_name=models.CharField(max_length=255)
def __str__(self):
return self.bus_name
class Meta:
verbose_name = 'Bus'
verbose_name_plural = 'Buses'
class BusRoute(models.Model): # lists out routes with start and end stops with the bus running between the stops
start_stop = models.ForeignKey(BusStop,
related_name='start_stop',
on_delete=models.CASCADE)
end_stop = models.ForeignKey(BusStop,
related_name='end_stop',
on_delete=models.CASCADE)
bus_in_route = models.ForeignKey(Bus,
related_name='bus_in_route',
on_delete=models.CASCADE)
start_time = models.TimeField()
end_time = models.TimeField()
def __str__(self):
return str(self.start_stop)
serializers.py
class BusRouteSerializer(serializers.ModelSerializer):
class Meta:
model = BusRoute
#fields=('firstname','lastname')
fields='__all__'
class BusSerializer(serializers.ModelSerializer):
bus_in_route = BusRouteSerializer(read_only=True,many=True)
class Meta:
model = Bus
fields='__all__'
class BusStopSerializer(serializers.ModelSerializer):
start_stop = BusRouteSerializer(read_only=True,many=True)
end_stop = BusRouteSerializer(read_only=True,many=True)
class Meta:
model = BusStop
fields='__all__'
views.py
class searchBusRoute(ListAPIView):
serializer_class = BusRouteSerializer
filter_backends = [SearchFilter, OrderingFilter]
def get_queryset(self):
queryset = BusRoute.objects.all()
return queryset
ForeignKey 的用法对吗?
在我的views.py 中,我尝试使用start_stop__stop_name 打印查询集。它正确打印停止名称。
我在使用序列化程序时遇到了上述问题。
提前致谢!
【问题讨论】:
-
可否添加序列化实例化的视图?
-
@KevinSmeeks 我已经添加了 views.py 代码
标签: python json django django-rest-framework django-serializer