首页 > 解决方案 > 序列化字段时如何获取字符串片段(Django / DRF)

问题描述

第一次在这里问,我会尽量听起来很聪明!因此,我有一个名为“Article”的模型,并在其“文本”字段中填充了 1000 多个字符的文本。当我通过端点发送“文章”序列化对象时,我怎样才能做到只发送“文本”字段的前 200 个字符?

视图.py

class ArticleScrape(generics.ListAPIView):                                                                                                                                                                          
    queryset = Article.objects.all()                                                                                                                                                                                
    serializer_class = ArticleSerializer                                                                                                                                                                            

    def list(self,request):                                                                                                                                                                           
        serializer = ArticleSerializer(queryset, many=True)                                                                                                                                                         
        return Response(serializer.data) 

序列化程序.py

class ArticleSerializer(serializers.ModelSerializer):                                                                                                                                                               
    authors = EachAuthorSerializer(many=True,read_only=True)                                                                                                                                                        
    tags = EachTagSerializer(many=True,read_only=True)                                                                                                                                                              
    text = serializers.CharField(max_length=200)                                                                                                                                                                    
    class Meta:                                                                                                                                                                                                     
        model = Article                                                                                                                                                                                             
        exclude=('id',) 

我需要在查询集中执行此操作吗?在序列化器中?我要注释一个字段吗?我已经尝试了很多,但没有成功。在此先感谢您的帮助!

标签: pythondjangodjango-rest-framework

解决方案


有不同的方法,我喜欢的第一个是向模型添加属性并将其字段添加到序列化程序:

class Article(models.Modle):
    ...
    @property
    def summary(self):
        return self.text[:200]


class ArticleSerializer(serializers.ModelSerializer):                                                                                                                                                               
    summary = serializers.CharField()                                                                                                                                                        

对于第二种方法,您可以使用 SerializerMethodField:

class ArticleSerializer(serializers.ModelSerializer):                                                                                                                                                               
    summary = serializers.SerializerMethodField() 

    def get_summary(self, obj):
        return obj.text[:200]

推荐阅读