Django添加方法__unicode__()无效 的解决办法

初学者在Django中遇到问题,__unicode__()方法未按预期工作,教程中提到的该方法在Python 2.7有效,但在Python 3中由于Unicode处理方式改变而失效。Django模型默认使用__str__(),它会调用__unicode__()并转为UTF-8字符串。为解决问题,将__unicode__()替换为__str__()后恢复正常。此问题的记录供未来参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初学Django,按照教程添加__unicode__()方法后不工作,还是显示默认的内容,教程是这么说的


为什么是 __unicode__() 而不是 __str__()?

如果你熟悉 Python,那么你可能会习惯在类中添加 __str__() 方法而不是 __unicode__() 方法。 We use 我们在这里使用 __unicode__() 是因为 Django 模型默认处理的是 Unicode 格式。当所有存储在数据库中的数据返回时都会转换为 Unicode 的格式。

Django 模型有个默认的 __str__() 方法 会去调用 __unicode__() 并将结果转换为 UTF-8 编码的字符串。这就意味着 unicode(p) 会返回一个 Unicode 字符串,而 str(p) 会返回一个以 UTF-8 编码的普通字符串。

如果这让你感觉困惑,那么你只要记住在模型中添加 __unicode__() 方法。 运气好的话,这些代码会正常运行。


思考了下可能是因为在python3.0以后默认字符都改成了unicode,导致这个在2.7下可以运行的方法在3.0中失效。

直接换成__str__() 运行正常。


(google了下没结果,写篇帖子留记录)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值