修改Django Rest Framework中序列化程序的输出

aka*_*nom 3 python django django-rest-framework

我正在使用django rest框架来输出文章的内容.它工作得很精彩,除了现在我想修改行为不返回完整的"内容",而是一个预告片(比如内容的前200个字符,但理想情况下我希望能够添加任何逻辑,比如说200个字符后的第一句结尾):

class ArticleSerializer(serializers.HyperlinkedModelSerializer):
    user = UserSerializer(many=False, read_only=True)

    class Meta:
        model = models.Article
        fields = (
            'id'
            ,'title'
            , 'date_added'
            , 'content'
            , 'user'
        )
Run Code Online (Sandbox Code Playgroud)

我看了GenericAPIView,我认为可能有一些东西要覆盖 - 但没有什么看起来很明显 - 有人可以提供一些见解吗?先感谢您

mar*_*dev 5

我很确定你需要的是:

http://django-rest-framework.org/api-guide/fields.html#serializermethodfield

class ArticleSerializer(serializers.HyperlinkedModelSerializer):
    user = UserSerializer(many=False, read_only=True)
    teaser = serializers.SerializerMethodField('get_teaser')

    class Meta:
        model = models.Article
        fields = (
            'id'
            ,'title'
            , 'date_added'
            , 'user'
            , 'teaser'
        )

    def get_teaser(self, obj):
        return force_text(obj.content[:20])
Run Code Online (Sandbox Code Playgroud)

  • 默认情况下,DRF在这种情况下查找方法`get_ {serializer_method_field_name}`,预告片.如果我们想使用自定义方法名称,那么我们可以将方法名称传递给SerializermethodField.如果我错了,请纠正我. (2认同)