django - 更改序列化程序以显示 foreignKey 字段的 id 和标题
问题描述
我正在使用 DRF,并且我有一个配置文件序列化程序,其中一个组字段是组模型的外键。配置文件序列化器:
class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = ('group', ...)
型材型号:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
# other fields
group = models.ForeignKey(Group, on_delete=models.CASCADE)
团体模型:
class Group(models.Model):
title = models.CharField(max_length=100)
def __str__(self):
return self.title
组序列化器:
class GroupSerializer(serializers.ModelSerializer):
class Meta:
model = Group
fields = ('title', 'id')
extra_kwargs = {'id': {'read_only': True}}
我的 SPA 中有一条路线显示配置文件列表。我想显示每个配置文件的组标题,但这个序列化程序只为我提供组的 id,我不想创建另一个视图来获取组的 id 并给我标题。所以我搜索它,它首先是 2 解决方案,StringRelatedField
即. 我更改并添加如下:read_only
SlugRelatedField
ProfileSerializer
SlugRelatedField
class ProfileForAdminSerializer(serializers.ModelSerializer):
group = serializers.SlugRelatedField(
many=False,
queryset=Group.objects.all(),
slug_field='title'
)
class Meta:
model = Profile
fields = ('group', ...)
现在我可以访问配置文件组的标题,但问题是我必须创建配置文件并提供组字段的标题,但我想像以前一样创建配置文件并发送组 ID,并且还可以访问组标题而不发送另一个请求. (抱歉英语不好)
解决方案
您是否考虑source
过有关序列化程序字段的参数?
它应该是这样的
group_title = serializers.ReadOnlyField(source='group.title')
class Meta:
...
fields = ('group_title', ...)
推荐阅读
- reactjs - useEffect 是否需要依赖数组中的所有数据都处于 React 状态?
- python - python中的Boid动画
- spring - Kafka生产者与spring kafka模板工厂实现
- c++ - 如何创建圆角 wxBitmap 按钮?
- javascript - Mat-autocomplete 面板应与主机输入的宽度相同,或者根据内容更宽
- svelte - 仅在某些引用变量发生更改时更新的 Svelte 反应式语句
- python - MultiIndex的重采样
- repeat - 在 Photoshop 中的当前位置平铺图像
- python - 如何使用另一个已在 python-selenium 中选择为根的 xpath 选择元素?
- python - 无法在 kivy 应用程序中禁用全屏选项