python - 序列化字段时如何获取字符串片段(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',)
我需要在查询集中执行此操作吗?在序列化器中?我要注释一个字段吗?我已经尝试了很多,但没有成功。在此先感谢您的帮助!
解决方案
有不同的方法,我喜欢的第一个是向模型添加属性并将其字段添加到序列化程序:
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]
推荐阅读
- amazon-web-services - React Native 如何从异步函数中获取变量并将其返回
- java - 如何生成一定范围内的随机数列表,然后获取未包含在该列表中的数字
- php - PHP Post XML 使用 CURL 编码问题
- angular - 如果第一个失败,我如何显示默认源?
- python-3.x - Kivy:当我已经识别了所有类时,为什么它显示“未知类”
- mirth - Mirth - 如何在有多个目的地时处理响应
- flutter - 如何通过引用有状态小部件来传递数据?我想更改有状态小部件内的变量并更新原始变量
- python - 来自不同位置的 2 个输入 python 多线程
- sqlite - 运行 Sqlite 批处理文件以读取同一目录中的所有 .txt 文件
- python - 清理时出现python多进程socket.error