序列化字段时如何获取字符串切片(Django / DRF)

第一次在这里问,我会尝试听起来很聪明!因此,我有一个名为“ Article”的模型,并在其中的“ text”字段中填充了1000多个字符。我如何做到这一点,以便在通过端点发送“ Article”序列化对象时仅发送“ text”字段的前200个字符?


views.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) 

serializers.py


我是否需要在queryset中执行此操作?在序列化器中?我是否要对字段进行注释?我已经尝试了很多这种方法,但都没有成功。先谢谢您的帮助!


慕莱坞森
浏览 144回答 3
3回答

UYOU

有多种方法,我首选的第一种方法是将属性添加到模型中,并将其字段添加到序列化器中: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]

达令说

另一种方法是创建自己的自定义字段:class CustomCharField(serializers.CharField):    def __init__(self, repr_length, **kwargs):        self.repr_length = repr_length        super(CustomCharField, self).__init__(**kwargs)    def to_representation(self, value):        return super(CustomCharField, self).to_representation(value)[:self.repr_length]并在序列化器中使用它:class ArticleSerializer(serializers.ModelSerializer):    text = CustomCharField(repr_length=200)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python