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='')
现在使用 Django Rest Framework,我想创建序列化程序,它将返回城市详细信息以及城市中所有 BusStops 的列表 - 但我希望该列表只是带有 BusStop 名称的字符串,如下所示:
{
"id": 1
"name": "City"
"last_update": "2019-09-19T22:13:54.851363Z"
"bus_stops": [
"stop1",
"stop2",
"stop3"
]
}
到目前为止,我尝试过的是以下序列化程序:
from rest_framework import serializers
class BusStopSerializer(serializers.ModelSerializer):
class Meta:
model = BusStop
fields = ('name', )
class CityDetailsSerializer(serializers.ModelSerializer):
busstop_set = BusStopSerializer(many=True)
class Meta:
model = City
fields = ('id', 'name', 'last_update', 'busstop_set')
但这会创建其中包含“名称”的对象列表。那么,如何创建一个仅包含BusStop
名称(作为字符串)的列表?
解决方案
而不是额外的,BusStopSerializer
你可以使用StringRelatedField:
# models.py
class BusStop(models.Model):
city = models.ForeignKey(City, on_delete=models.CASCADE)
name = models.CharField(max_length=200, blank=True, default='')
def __str__(self):
return self.name
# serializers.py
class CityDetailsSerializer(serializers.ModelSerializer):
bus_stops = StringRelatedField(many=True)
class Meta:
model = City
fields = ('id', 'name', 'last_update', 'bus_stops')
推荐阅读
- java - ModelMapper - 无法将 org.hibernate.collection.internal.PersistentBag 转换为 java.util.ArrayList
- google-apps-script - 修改 Google Apps 脚本全局变量
- android - 找不到构建工具修订版 30.0.1
- angular - variable.scss 从数据库中获取动态值 - Ionic 5
- python - numpy 点积的向量化抛出值错误
- angularjs - 使用 Angular 从 Firestore 中删除数据
- google-apps-script - 在 Google 表格中计算生日
- firebase - 自动计算与存储在 Firebase Firestore Flutter 中的地理坐标数据的距离
- excel - 更改图表对象属性时出现运行时错误
- firebase-cloud-messaging - 如何在 ejabberd 上使用 FCM 连接和发送推送通知?