ken*_*gcc 4 python django django-serializer django-rest-framework
我有以下标签和帖子对象的多对多关系.我尝试在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')
Run Code Online (Sandbox Code Playgroud)
目前,PostSerializer以json格式返回带有所有字段的标签,我只想让它在字符串列表中返回标签:['tag1','tag2','tag3'].
一种方法是:
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)
Run Code Online (Sandbox Code Playgroud)
第二种方式是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')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3022 次 |
| 最近记录: |