django restframework 使用 SerializerMethodField 获取关联的model的字段

首先,SerializerMethodField的使用非常简单

class CommentSerializer(serializers.ModelSerializer):
    name = serializers.SerializerMethodField('get_user_name')

    class Meta:
        model = Comment
        fields = ('name', 'create_time', 'text')

    def get_user_name(self, obj):
        return obj.author.nickname

如上图,obj是对应的模型,此处是Comment。author是Comment的ForeignKeyField,nickName是Author的一个字段。

到此为止非常简单,但如果我有一个manytomany的字段该怎么办?譬如:

class Post(models.Model):
    like = models.ManyToManyField(User, related_name='likes', blank=True)

一个博客可能被多个用户点赞,而一个用户也可以点赞多个博客。此时,如果还是照搬前面的代码,在PostSerializer中写成

def get_who_like_it(self, obj):
    return obj.like.nickname

就会产生错误,错误原因是Obj.like是一个ManyRelatedManager。那么把代码改成这样子即可:

    def get_who_like_it(self, obj):
        return [author.nickname for author in obj.like.all()]

文档中(针对类似的情况)提供了更多解决方案。https://www.django-rest-framework.org/api-guide/relations/#serializer-relations

猜你喜欢

转载自blog.csdn.net/csdn_yi_e/article/details/86475587
今日推荐