Django引用外键时的要点,报错Object of type xxx is not Json serializable

Python继承不是抄代码:解密MRO契约与Mixin设计陷阱 Python继承本质上是一种运行时契约机制,而非简单的代码复用;其核心依赖方法解析顺序(MRO)保障多态一致性,并通过super()动态调度实现协作式初始化。理解C3线性化算法、避免菱形继承中的重复初始化、区分Mixin与工具函数的类型系统价值,是构建可维护类体系的关键。本文聚焦生产级场景——如pydantic模型组合、Django Model多继承、FastAPI Router扩展中真实出现的MRO冲突、状态污染与__init__调用错位问题,提供基于__init_subclass__、描述符和显式依赖声 阅读详情
快速了解本文:当引用外键属性时候,应该是 属性_id,例如 b是model A的外键属性,应用A.b_id来获取b对应的属性值。
以下是具体分析
报错截图如下:
问题不难发现,provice_id:后面是一个Area对象实例,无法json序列化返回给前端。
问题差在哪里呢?
来看简要分析:

models
class Area(models.Model):
....
    name = models.CharField(max_length=20, verbose_name='Province Name')
    parent = models.ForeignKey('self',
                               on_delete=models.SET_NULL,
                               related_name='subs',
                               null=True,
                               blank=True,
                               )
class Address(models.Model):
....
    title = models.CharField(max_length=30, verbose_name="title")
    province = models.ForeignKey(Area, on_delete=models.PROTECT, related_name='province_address',verbose_name='province_name')
两个简化的模型,去除多余的字段来看外键
上图 Address 的province字段关联了Area
外键可以理解为,province挂载了一个Area实例
class AddressView(View): 
....
    address = Address.objects.create(
                province_id=province_id,
                title=title
            )
    address.save()
    data = {"code": 0, "msg": "OK", "address": {
        "id": address.id,
        "title": address.title,
        "province_id": address.province,
    }}
    return JsonResponse(data)
简化了视图,来看如何 错误地 引用address的外键对象
address.province,你猜会得到什么?
得到address.<Object Area>,这样返回不是前端想要的数据格式。
其实外键属性都自动创建了_id替代原有字段,要用address.province_id才能得到具体数据。
这是django独特的地方,今天领教了~
这里就可以清晰的看到address表里有province_id但没有province字段,印证了上面所说的。
class Address(View):
....
address.save()
data={"code":0,"msg":OK,"address”:{
        "id":address.id,
        "province":address.province.name
}

}
如果想引用外键的属性name,那就直接address.province.name,因为address.province是挂载了外键的实例,那当然可以 .属性 引用啦。
Python日常开发中的五大基础实现陷阱与避坑方案 Python基础实现问题并非语法错误,而是数据输入、逻辑处理、结果输出等工程环节中反复出现的底层契约冲突。其根源在于标准库行为、类型隐式转换、内存模型及并发模型等fundamental机制在daily落地时的失配。这类问题不触发编译失败,却导致线上故障频发、调试成本陡增,典型如pandas CSV加载失真、可变默认参数共享、JSON序列化失败、threading.local伪线程安全、日志配置污染等。掌握这些implementation issues的识别逻辑与防御模式,是提升代码健壮性、团队交付效率和系统 阅读详情

相关推荐

【已解决】django 后台view.py中将数据转为json报错:TypeError: Object of type datetime is not JSON serializable。

​​​​​​​【已解决】django 后台view.py中将数据转为json报错:TypeError: Object of type datetime is not JSON serializable。之后又报错TypeError: In order to allow non-dict objects to be serialized set the safe parameter to False.

c1007857613的专栏 637

django之 Object of type xxx is not JSON serializable

在启动django框架运行之后,我进行测试用户的登录功能模块, 我输入正确的用户名和密码以及验证码之后,本来正常情况时之间跳转到主页面的, 虽然报的信息是“登录成功!”,但是发现跳转到主页面不成功, 然后就发现Pycharm终端报了这样一个错误: Internal Server Error: /web/employer_dologin/ Traceback (most recent call last): File "D:\env\first\lib\site-packages\dja

水w的博客 5748

【已解决】django views.py中报错TypeError: Object of type QuerySet is not JSON serializable

【已解决】django views.py中报错TypeError: Object of type QuerySet is not JSON serializable

c1007857613的专栏 734

【Django】【MySQL】Django中使用MySQL Decimal数据后报错Object of type Decimal is not JSON serializable解决办法

​其实这个错误用不着去修改数据库中的数据类型 当MySQL里面的Decimal类型需要传入request进行暂存时,Django的框架会调用一个json.dumps 可以发现这里user_id是Decimal('0'),麻中麻 把Decimal类型的数据按照情况,转换成int、float、str进行保存就行了 这样传request参数的时候就可以正常传入啦! 改完这个之后就可以正常运行了 看到之前写的好多博客 如果是我们手动使用json.dumps的话,里面如果有Decimal也

crosnken的博客 653

告别点不亮!STM32F103驱动HT1621段码屏的常见坑点与调试心得

本文详细解析了STM32F103驱动HT1621段码屏的五大常见问题及解决方案,包括硬件连接、时序控制、RAM地址映射等关键难点。通过实测数据和代码示例,帮助开发者快速排查显示异常问题,提升驱动开发效率。特别针对HT1621与STM32F103的兼容性问题提供了专业调试建议。

weixin_30925435的博客 379

Wine7.22实战:如何在Ubuntu上完美运行通达信和微信(附字体配置技巧)

本文详细介绍了如何在Ubuntu系统上使用Wine7.22版本,完美运行通达信和微信这两款Windows专属软件。通过选择稳定的Wine7.22版本、利用现成的兼容容器,并重点解决了中文字体渲染的核心难题,提供了从环境搭建、字体配置到软件安装调优的一站式实战指南,帮助用户在Linux环境下无缝使用关键金融与通讯工具。

weixin_29280657的博客 549

解决Object of type “XXX“ is not JSON serializable 解决办法

解决Object of type “XXX” is not JSON serializable 解决办法 Object of type “XXX” is not JSON serializable 翻译是:无法正常序列化 XXX 对象。 这个问题是由于json.dumps()函数引起的 dumps是将dict(字典)数据类型转化为 str数据,但是dict数据中包含byte(字节)数据,所以会报错。 解决办法:就是遇到字节类型就转为字符串类型。 举例: def change_type(byte): if

qq_43229040的博客 4万+

告别硬编码!用Aviator 5.3.3实现动态规则引擎,Spring Boot项目实战教程

本文详细介绍了如何使用Aviator 5.3.3在Spring Boot项目中实现动态规则引擎,告别硬编码。通过Maven依赖集成、规则模型设计、规则执行引擎实现及电商促销系统实战案例,展示了Aviator在动态规则配置中的高效应用,提升业务灵活性和开发效率。

weixin_30329623的博客 446

Django笔记---项目报错之“xxx is not JSON serializable”

1. 错误说明:    在 Django 项目中,我们会用到 Session,比如:购物车项目中,就会用 Session 来保存一个商品对象。但是,当我们的 Django 版本高于等于 1.6 时(本人的是 1.8 的),使用 Session 来保存一个 Object 就会出现如下错误: XXX is not JSON serializable。 2. 错误原因: 因为自从 Djan

GuLu_GuLu_jp的专栏 7316

Comsol有限元网格剖分实战:从基础操作到高效仿真技巧

本文系统介绍了COMSOL有限元网格剖分的核心实战技巧。从基础的物理场控制与用户控制网格选择,到三角形、四边形、四面体等网格单元类型的适用场景,再到扫掠网格、边界层网格与复制网格等高效剖分方法,最后讲解了网格质量评估与几何预处理的关键步骤。旨在帮助用户掌握从自动到手动、从基础到高效的网格剖分艺术,实现仿真精度与计算效率的最佳平衡。

j7k8l的博客 375

光谱预处理最简单实现方法--基于OpenSA光谱分析库

系列文章目录 “光晰本质,谱见不同”,光谱作为物质的指纹,被广泛应用于成分分析中。伴随微型光谱仪/光谱成像仪的发展与普及,基于光谱的分析技术将不只停留于工业和实验室,即将走入生活,实现万物感知,见微知著。本系列文章致力于光谱分析技术的科普和应用。 文章目录系列文章目录前言一、数据来源二、代码解读2.1 读取数据2 .2 划分数据集2 .3 返回训练集和测试集并绘制光谱图片2.4 建立1-D CNN模型2.5 训练1-D CNN模型2.6 测试1-D CNN模型2.7 运行CNN模型,并用查看结果总结

Echo_Code的博客 7067

XXX is not JSON serializable 另类解决方式

这个问题在网上看了很多方法,根绝和我的错误对不上,没办法只好不停找寻,最终发现了一个合适的方式,其中原因我也说不清,也许其他人也会遇到,放出来让大家瞧瞧吧 我之所以会遇到这个问题我认为不是代码问题。我把项目部署到Linux上时遇到这个错误,但在windows上这个问题不存在。 results = sockQuery(query) //zmq 通信获得了json数组大概是这样

qq_20373723的博客 3万+

PyQt5 使用QSqlDatabase连接Mysql数据库时Driver not loaded Driver not loaded

PyQt5 使用QSqlDatabase连接Mysql数据库时Driver not loaded Driver not loaded

睡觉不打呼噜的博客 1563

Django单元测试最佳实践:test_models.py与test_views.py的职责分离

单元测试是保障Web应用稳定性的基础工程能力,其核心在于通过可重复执行的断言验证代码行为是否符合预期。在Django生态中,由于ORM、中间件、信号、DRF序列化等多层抽象叠加,手动验证成本急剧上升,必须依赖自动化测试建立可信边界。Django原生TestCase提供了数据库隔离、请求模拟和框架集成三大优势,尤其适配DRF视图测试与Celery任务同步执行场景。通过严格划分test_models.py(专注数据契约与模型逻辑)和test_views.py(模拟HTTP流但切断外部依赖),可实现高内聚、低耦合

weixin_30394981的博客 400

超声波传感器(CHx01) 学习笔记 Ⅲ - I2C读写操作

CH-x01 通过 2 线 I2C 协议与主机处理器通信

nicole088的专栏 1737

YOLOv11涨点改进| Kimi团队 2026 |独家创新首发、注意力改进篇|爆火AttnRes残差自注意力模块,含多种创新改进,借助残差思想,缓解细节信息在传播过程中被稀释,促进YOLOv11涨点

🔥本文提出AttnRes残差自注意力模块,通过深度维度的注意力加权机制替代传统固定残差累加方式,使YOLOv11网络能自适应选择更有价值的历史层特征进行聚合。该方法缓解了浅层细节信息在深层传播过程中被稀释的问题,有效融合浅层纹理与深层语义特征,提升小目标、密集目标和复杂场景的检测能力。AttnRes还改善了深层网络的梯度分布与训练稳定性,增强模型收敛质量和泛化能力。实验表明,该模块能以较小计算开销显著提升YOLOv11的特征表达能力、检测精度和整体鲁棒性。文中详细介绍了模块结构、实现原理、优势特点

Ai缝合怪、助力小伙伴高效发论文 125

Python方法重载与重写:从原理到工程实践

在动态类型语言中,方法重载(Method Overloading)与方法重写(Method Overriding)代表两种根本不同的多态范式:前者关注同一接口对多种输入类型的适配能力,依赖运行时分发机制;后者基于继承链的名称解析(MRO)与super()协作,实现行为的可扩展覆盖。Python不支持编译期重载,但通过isinstance分支、functools.singledispatch、@overload类型提示及Protocol协议等手段,可安全模拟灵活参数处理;而重写则是其面向对象体系的核心支柱,广

weixin_30666401的博客 355

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Python __slots__ 内存优化:减少30%以上对象内存占用

Python对象默认使用__dict__字典存储属性,导致每个实例产生显著内存开销;__slots__通过编译期固定属性名,消除动态字典结构,将对象内存布局压缩为紧凑的C风格结构体。其核心价值在于降低单实例内存(如从64B降至40B)、提升CPU缓存命中率,并在海量实例场景(如行情快照、订单模型)中实现指数级内存节省。适用于字段固定、生命周期长、数量庞大的数据类,尤其配合dataclasses.slots=True可兼顾类型安全与工程效率。

wyjvip333的专栏 465

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

MySQL 入门

本文全面介绍了MySQL数据库及其相关技术,内容涵盖: 数据库基础概念:包括数据库系统组成、关系型与非关系型数据库对比、MySQL核心特点等; MySQL操作管理:详细讲解了安装配置、SQL语句分类、数据类型、索引原理等核心内容; 高级特性:深入分析事务、锁机制、存储引擎、主从复制等关键特性; 扩展架构:系统介绍了读写分离、集群部署、分库分表等企业级解决方案; 开发集成:提供了JDBC连接、MyCat中间件等实践指南。 文章采用结构化组织方式,从基础到高级层层递进,包含了大量实用性强的代码示例和配置模板

weixin_51689532的博客 1243

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Python3运行报错:TypeError: Object of type ‘type‘ is not JSON serializable解决方法(不是针对对象转Json的方法)

问题描述: Python内置的json模块提供了非常完善的Python对象到JSON格式的转换。 json.dumps() #将Python中的对象转换为JSON中的字符串对象 json.loads() #将JSON中的字符串对象转换为Python中的对象 这个问题是由于json.dumps()函数引起的。dumps是将dict数据转化为str数据,但是dict数据中包含byte、int、float、datetime等等的时候,数据所以会报错。 可能会遇到T...

qq_38680405的博客 5万+

Django报错: TypeError: Object of type ListSerializer is not JSON serializable

Object of type ‘ListSerializer’ is not JSON serializable “listserializer” 类型的对象不可JSON序列化 一般原因为 序列化的对象列表返回前端时没有点data的问题

Lonelypatients°的博客 1881

Django模型中外键的序列化

一、 可以展示外键表中的任意字段,但是在保存时需要自定义字段的内容 asset_info = serializers.CharField(source='asset') asset_info 展示字段名 source 来源,如果字段唯一,可以指定字段,如果不唯一,则为整个表 # source后面是该表的字段名,而不是外键表名 二、 这种方法同样可以实现字段展示的要求,同时自定义的字段不是required,在保存时不会出现相应的问题 asset_info = Serial

dei_妖怪哪里跑 799

序列化 serializers

Django的序列化工具让你可以将Django的模型‘翻译’成其它格式的数据。通常情况下,这种其它格式的数据是基于文本的,并且用于数据交换\传输过程。 一、序列化数据 Django为我们提供了一个强大的序列化工具serializers。使用它也很简单,如下所示: from django.core import serializers data = serializers.seriali...

weixin_30830327的博客 361

Django报错:Object of type QuerySet is not JSON serializable

想做一个显示一条通知的请求响应, def getone(self,request): try: oid = int(request.pd.get('id')) qs = Notice.objects.filter(id = oid).values( "id", "pubdate", "author", 'author__realname', "title", "content", "status" ) da

m0_61886238的博客 822

server error 500 及 Object of type ‘ObjectID‘ is not JSON serializable 总结

server error 500 及 Object of type 'ObjectID' is not JSON serializable

Damonhaus的博客 2865

python3运行报错:TypeError: Object of type 'type' is not JSON serializable解决方法(详细)

首先网上大多数博客没有明确说明问题的来源 这个问题是由于json.dumps()函数引起的。dumps是将dict数据转化为str数据,但是dict数据中包含byte数据所以会报错。 解决:编写一个解码类 遇到byte就转为str 1.MyEncoder.py import json class MyEncoder(json.JSONEncoder): def default(self, obj)...

xiaohuo0930的博客 8万+
上一篇: 解决:consumer: Cannot connect to amqp://admin:**@127.0.0.1:5672//: [Errno 111] Connection refused.
下一篇: django3.1 中url匹配顺序和re_path的作用
家用通马桶高级工程师
博客等级 码龄9年 0粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值