Django rest框架序列化器返回一个列表而不是json

时间:2015-10-18 08:04:05

标签: python django django-rest-framework django-serializer

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

serializers.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']。

1 个答案:

答案 0 :(得分:7)

一种方法是:

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')