首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >『Django』使用ModelSerializer简化业务代码

『Django』使用ModelSerializer简化业务代码

作者头像
德育处主任
发布2026-06-04 09:28:54
发布2026-06-04 09:28:54
540
举报

本文简介

上一讲《『Django』初识DRF》 介绍了如何使用 DRF,如何快速写出接口。但写法还是稍微有点麻烦。比如在编写 serializers.py 里的代码时,我们要手动将需要返回的字段一个个定义好,还要定义它们的返回类型、长度等限制。但其实这些定义我们在定义模型(models.py)的时候就已经写过了,需要重复写这些代码一来容易出错,二来以后要修改的话就要修改多处地方。

其实 djangorestframework 早就给我们准备好更简单的方法,就是直接引用 models.py 定义好的字段。

动手实现

在 《『Django』初识DRF》 里,我们在 blog 应用中创建的 serializers.py 文件的代码是这样的。

代码语言:javascript
复制
# blog/serializers.py

from rest_framework import serializers

class BlogListSerializer(serializers.Serializer):
    # 将需要序列话的字段逐一列出来
    id = serializers.IntegerField(read_only=True) # IntegerField: 整数
    title = serializers.CharField(max_length=100) # 限制长度为100
    cover_image = serializers.ImageField()
    user = serializers.CharField()

BlogListSerializer 里的代码又长又容易出错。我们稍微改造一下这个文件的代码,在 BlogListSerializer 里传入 serializers.ModelSerializer

然后将 blog/models.py 里定义的 Article 模型引入。

接着在 BlogListSerializer 里创建一个 Meta 类,将需要返回的字段放在一个数组里,并将该数组赋值给 fields 就能达到 《『Django』初识DRF》 里的效果。

代码语言:javascript
复制
# blog/serializers.py

from rest_framework import serializers
from .models import Article

class BlogListSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article

        # 只解析需要的字段
        fields = ["id", "title", "cover_image", "user"]

此时通过 python manage.py runserver 命令运行项目,然后访问 http://127.0.0.1:8000/api/blog/apiBlogList/

01.png
01.png

该有的字段一个没少。

如果你不想一个个字段的列出来,希望将 Article 里定义的所有字段都一次过返回,可以这么写。

代码语言:javascript
复制
# blog/serializers.py

# 省略部分代码

class BlogListSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article

	# 将模型里的全部字段都加载出来
	fields = "__all__"
02.png
02.png

以上就是本文的全部内容。下一讲会介绍在 DRF 里如何使用装饰器创建 POSTPUT 等类型的接口。

IMG_4385 2.GIF
IMG_4385 2.GIF

点赞 + 关注 + 收藏 = 学会了

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 动手实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档