python - Django 仅序列化一个字段而不是相关字段中的整个模型(只读)
问题描述
我想通过直接使用嵌套模型的字段来序列化只有一个字段的嵌套模型字段。
以下代码应说明情况:
# models
class Tag(models.Model):
title = models.CharField(max_length=255, unique=True)
class Scene(models.Model):
title = models.CharField(max_length=255, unique=True)
tags = models.ManyToManyField(Tag, blank=True)
# serializers
class SceneSerializer(serializers.ModelSerializer):
class Meta:
model = Scene
fields = ('id', 'title', 'tags',)
read_only_fields = ('tags',)
如果使用它会输出以下内容:
{
"id": 1,
"title": "yolol",
"tags": [
1,
2
]
}
我想要的是以下输出(使用 Tag.title 而不是主键):
{
"id": 1,
"title": "A Scene",
"tags": [
"3D",
"Industry"
]
}
如何编写为标签执行此操作的序列化程序?
解决方案
您可以使用SlugRelatedField
:
class SceneSerializer(serializers.ModelSerializer):
tags = serializers.SlugRelatedField(
many=True,
read_only=True,
slug_field='title'
)
class Meta:
model = Scene
fields = ('id', 'title', 'tags',)
推荐阅读
- python-2.7 - 从最小数量的 Sentine-1 SAR 图像创建马赛克,该图像具有最大覆盖多边形 shapefile
- django - 每个 Wagtail 页面上的 Django 表单,例如 base.html 页脚中的联系表单
- android - android studio中的firebase数据更改方法
- javascript - 当我在 JavaScript 中向 Firebase 实时数据库添加新值时如何保存当前日期/时间
- javascript - 如何在类中使用 Angular 创建服务实例(可注入)
- npm - 如何使用 npm start 在 package.json 脚本中同时运行 2 个命令?
- c# - 使用 Elasticsearch 配置 Heartbeat 解析 Json 结果
- r - 如何在 tidyverse 中选择性地自动更改变量数据类型?
- windows - 解决保留 xmm 寄存器的 Windows 调用约定?
- c - 求解 n = a + (a+1) + (a+2) + … + b 中的 a 和 b