我有以下标签,并以多对多关系发布对象。我尝试在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']。
答案 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')