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

标签 python django serialization model django-rest-framework

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

以下代码应该可以解释这种情况:

# 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 - Django 仅序列化一个字段而不是相关字段中的整个模型(只读),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56950062/

相关文章:

c# - "System.Web.HttpContext cannot be serialized because it does not have a parameterless constructor."

c# - 如何使用 MongoDB C# 序列化程序序列化值类型?

Python JSON 解码得到错误的值

python - urllib2.Request post 相当于node.js

django - Django 和 mod_wsgi : "Script timed out before returning headers: wsgi.py" 的问题

django - EOF 发生违反协议(protocol) (_ssl.c :1125) on python:3. 8-slim-buster

django - Tastypie REST 上的外键 - 模型 '' 具有空属性

java - 在java中,如何检查方法m是否改变了它的接收者的状态

python - 自定义 Transformer 单独工作,但将它们组合成一个 Pipeline 时会崩溃

python 嵌套属性封装