更改序列化程序以显示外键字段的 ID 和标题
change serializer to show both id and title of a foreignKey field
我正在使用 DRF,并且我有一个 Profile 序列化程序,其中的组字段是组模型的外键。
配置文件序列化程序:
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', ...)
我正在使用 DRF,并且我有一个 Profile 序列化程序,其中的组字段是组模型的外键。 配置文件序列化程序:
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', ...)