Django 仅序列化一个字段而不是相关字段中的整个模型(只读)

Posted

技术标签:

【中文标题】Django 仅序列化一个字段而不是相关字段中的整个模型(只读)【英文标题】:Django serialize one field only instead of whole model in related fields (readonly) 【发布时间】:2019-11-18 20:42:04 【问题描述】:

我想通过直接使用嵌套模型的字段来序列化一个只有一个字段的嵌套模型字段。

下面的代码应该能说明情况:

# 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"
    ]

如何编写一个序列化程序来为标签执行此操作?

【问题讨论】:

【参考方案1】:

你可以使用SlugRelatedField:

class SceneSerializer(serializers.ModelSerializer):
    tags = serializers.SlugRelatedField(
        many=True,
        read_only=True,
        slug_field='title'
     )
    class Meta:
        model = Scene
        fields = ('id', 'title', 'tags',)

【讨论】:

以上是关于Django 仅序列化一个字段而不是相关字段中的整个模型(只读)的主要内容,如果未能解决你的问题,请参考以下文章

序列化程序返回对象而不是字段

Django Rest Framework - 将序列化器字段映射到数据库列名

Django 将查询集序列化为 JSON 以仅使用字段信息和 id 构造 RESTful 响应

django 中的 ModelForms 是不是仅用于发布?

django rest 框架:从序列化器 validate() 方法设置字段级错误

将值呈现为文本而不是 Django 表单中的字段