7

我有以下标签并以多对多关系发布对象。我尝试在后序列化程序中返回的是返回列表中的标签(仅使用 Tag.name)而不是 json,这样做的干净方法是什么?

序列化程序.py

class TagSerializer(serializers.ModelSerializer):
    class Meta:
        model = Tag
        fields = ('name', 'description', 'date_created', 'created_by')

class PostSerializer(serializers.ModelSerializer):
    tags = TagSerializer(read_only=True, many=True)

    class Meta:
        model = Post
        fields = ('post_id',
                  'post_link',
                  'tags')

目前,PostSerializer 返回带有所有字段的 json 格式的标签,我只希望它在字符串列表中返回标签:['tag1', 'tag2', 'tag3']。

4

2 回答 2

8

一种方法是:

class PostSerializer(serializers.ModelSerializer): 
    tags = serializers.SerializerMethodField()

    class Meta:
        model = Post
        fields = ('post_id', 'post_link', 'tags')

    def get_tags(self, post):
        return post.tags.values_list('name', flat=True)

第二种方法是使用 Post 模型上的属性:

class Post(models.Model):
    ....

    @property
    def tag_names(self):
        return self.tags.values_list('name', flat=True)


class PostSerializer(serializers.ModelSerializer): 
    tag_names = serializers.ReadOnlyField()

    class Meta:
        model = Post
        fields = ('post_id', 'post_link', 'tag_names')
于 2015-10-18T08:11:11.037 回答
0

一个非常简单的解决方案可能是改变这个

tags = TagSerializer(read_only=True, many=True)

进入这个

tags = TagSerializer(read_only=True, many=True).data

这会将您的标签列为 id,而不是列出每个标签的所有属性

于 2021-12-15T02:42:35.097 回答