为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕莱坞森 2021-05-21 08:22:01
第一次在这里问,我会尝试听起来很聪明!因此,我有一个名为“ Article”的模型,并在其中的“ text”字段中填充了1000多个字符。我如何做到这一点,以便在通过端点发送“ Article”序列化对象时仅发送“ text”字段的前200个字符?views.pyclass 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中执行此操作?在序列化器中?我是否要对字段进行注释?我已经尝试了很多这种方法,但都没有成功。先谢谢您的帮助!
查看完整描述

3 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

有多种方法,我首选的第一种方法是将属性添加到模型中,并将其字段添加到序列化器中:


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]


查看完整回答
反对 回复 2021-05-25
?
达令说

TA贡献1821条经验 获得超6个赞

另一种方法是创建自己的自定义字段:


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)


查看完整回答
反对 回复 2021-05-25
  • 3 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号