Django Rest Framework - 如何从相关模型集中仅获取一个字段

uma*_*mat 7 django django-rest-framework

我有以下型号:

from django.db import models

class City(models.Model):
    name = models.CharField(max_length=30)
    last_update = models.DateTimeField(null=True)

class BusStop(models.Model):
    city = models.ForeignKey(City, on_delete=models.CASCADE)
    name = models.CharField(max_length=200, blank=True, default='')
Run Code Online (Sandbox Code Playgroud)

现在使用 Django Rest Framework,我想创建序列化器,它将返回城市详细信息以及城市中所有公交车站的列表 - 但我希望该列表仅是带有公交车站名称的字符串,如下所示:

{
  "id": 1
  "name": "City"
  "last_update": "2019-09-19T22:13:54.851363Z"
  "bus_stops": [
    "stop1",
    "stop2",
    "stop3"
  ]
}
Run Code Online (Sandbox Code Playgroud)

到目前为止我所尝试的是以下序列化器:

{
  "id": 1
  "name": "City"
  "last_update": "2019-09-19T22:13:54.851363Z"
  "bus_stops": [
    "stop1",
    "stop2",
    "stop3"
  ]
}
Run Code Online (Sandbox Code Playgroud)

但这会创建其中包含“名称”的对象列表。那么,如何创建一个仅包含BusStop名称(作为字符串)的列表?

Dan*_*man 2

StringRelatedField,如 wfehr 所推荐的,仅当__str__BusStop 方法仅返回名称时才有效。另一种方法是使用SlugRelatedField,它允许您从相关模型中指定特定字段,并且不依赖于__str__.

bus_stops = SlugRelatedField(many=True, slug_field='name')
Run Code Online (Sandbox Code Playgroud)