Django序列化Serializers使用详解:从基础到指定字段

听雨眠
听雨眠
发布时间:2026-10-13| 2人浏览过
原创

本文深入解析Django核心序列化工具Serializers,阐述其在前后端分离架构中实现数据交换的作用。通过示例演示如何将ORM模型QuerySet转换为XML或JSON格式,并重点讲解利用fields参数精确控制序列化输出字段的方法,帮助开发者高效处理数据序列化与反序列化任务。

Django序列化概述

本文详细解析Django中Serializers序列化的工作流程,通过具体代码示例展示其应用,为学习和实际开发提供参考。

Django REST Framework (DRF) 的核心价值在于支撑前后端分离的开发模式。

前后端分离开发的关键环节包括:

  • 将数据库模型数据转换为JSON格式,这一过程称为序列化。
  • 将接收到的JSON数据还原为模型对象,这一过程称为反序列化。

Django提供的序列化工具允许开发者将Django模型“翻译”为其他数据格式。通常这些格式为基于文本的数据,主要用于数据交换和传输场景。

基础序列化操作

执行数据序列化操作。

Django内置了强大的序列化工具Serializers,其使用方式直观简便,具体用法如下所示:


from django.core import serializers
data = serializers.serialize("xml", SomeModel.objects.all())

data = serializers.serialize("json", Author.objects.all())
print(data)

[{"model": "index.author", "pk": 1, "fields": {"name": "pfeiliu", "age": 19, "email": "789@163.com", "isActive": false}}, {"model": "index.author", "pk": 5, "fields": {"name": "lao wei", "age": 18, "email": "123@qq.com", "isActive": true}}, {"model": "index.author", "pk": 6, "fields": {"name": "WangDB", "age": 36, "email": "wangdb@163.com", "isActive": false}}, {"model": "index.author", "pk": 7, "fields": {"name": "WangDB", "age": 36, "email": "wangdb@163.com", "isActive": false}}, {"model": "index.author", "pk": 8, "fields": {"name": "WangDB", "age": 36, "email": "wangdb@163.com", "isActive": false}}, {"model": "index.author", "pk": 9, "fields": {"name": "WangDB", "age": 36, "email": "wangdb@163.com", "isActive": false}}, {"model": "index.author", "pk": 10, "fields": {"name": "WangDB", "age": 36, "email": "wangdb@163.com", "isActive": false}}, {"model": "index.author", "pk": 11, "fields": {"name": "WangDB", "age": 36, "email": "wangdb@163.com", "isActive": false}}, {"model": "index.author", "pk": 12, "fields": {"name": "WangDB", "age": 36, "email": "wangdb@163.com", "isActive": false}}, {"model": "index.author", "pk": 13, "fields": {"name": "WangDB", "age": 36, "email": "wangdb@163.com", "isActive": false}}, {"model": "index.author", "pk": 14, "fields": {"name": "WangDB", "age": 36, "email": "wangdb@163.com", "isActive": false}}]

首先,从djang.core模块导入Serializers,随后调用其serialize方法。该方法至少需要两个参数:第一个指定目标数据格式(例如“xml”),第二个指定待序列化的数据对象,通常是一个ORM模型的QuerySet或任何可迭代对象。

整个过程简洁明了。

指定字段序列化

配置序列化指定字段。

若无需序列化模型的所有字段,仅希望输出特定字段,可通过fields参数进行筛选,示例如下:


from django.core import serializers
data = serializers.serialize('xml', SomeModel.objects.all(), fields=('name','size'))

data = serializers.serialize("json", Author.objects.all(),fields=('name','age'))
print(data)

[{"model": "index.author", "pk": 1, "fields": {"name": "pfeiliu", "age": 19}}, {"model": "index.author", "pk": 5, "fields": {"name": "lao wei", "age": 18}}, {"model": "index.author", "pk": 6, "fields": {"name": "WangDB", "age": 36}}, {"model": "index.author", "pk": 7, "fields": {"name": "WangDB", "age": 36}}, {"model": "index.author", "pk": 8, "fields": {"name": "WangDB", "age": 36}}, {"model": "index.author", "pk": 9, "fields": {"name": "WangDB", "age": 36}}, {"model": "index.author", "pk": 10, "fields": {"name": "WangDB", "age": 36}}, {"model": "index.author", "pk": 11, "fields": {"name": "WangDB", "age": 36}}, {"model": "index.author", "pk": 12, "fields": {"name": "WangDB", "age": 36}}, {"model": "index.author", "pk": 13, "fields": {"name": "WangDB", "age": 36}}, {"model": "index.author", "pk": 14, "fields": {"name": "WangDB", "age": 36}}]

以上内容为本文的全部讲解,希望能为读者的学习与工作带来帮助,欢迎继续支持本站获取更多技术资源。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。