django 项目
UserProfile 定义:
class UserProfile(models.Model):
easeim_username = models.CharField(null=True, unique=True, max_length=40)
email = models.EmailField(blank=True, null=True, unique=True)
qq = models.CharField(blank=True, null=True, max_length=32)
测试代码:
dic = {}
dic['im_username'] = pf.easeim_username # pf 是一个 UserProfile obj
dic['email'] = pf.email
dic['qq'] = pf.qq
调试截图:
pf 的 properties :
dic 的 items :
问题:
为何 dic['im_username']的值是 unicode 类型,而 dic['email']就变成了 tuple 类型了?同样还有 dic['qq'],为何会变成(None,)
1
lance6716 2016-07-09 12:25:13 +08:00 via Android
(None,): Python 语法
tuple 那个没法试,没装 Django 。命令行下 Python 自己没有这个特性 |
2
jiang42 2016-07-09 12:29:08 +08:00 via iPhone
我猜是 descriptor 里面做了些奇怪的事情
|
3
laoyur OP @lance6716 我知道(None,)这是个 Python 单元素元组的语法,我的问题是
pf.qq 本来是 None ,为何 dic['qq'] = pf.qq 后, dic['qq']值就变成了(None,)?不应该是 None 嘛? |
4
zq9 2016-07-09 12:36:58 +08:00 5
我猜你在语句后加了逗号, dic['email'] = pf.email,
|
5
laoyur OP |
7
laoyur OP @lance6716 因为源代码里面逻辑太乱,直接扒拉出来怕较难说清楚,主帖中的测试代码是我手动敲出来的。。。没想到恰恰是这个手动敲的动作,掩盖了真相
复制粘贴害死人,我原本是这样的逻辑: dic = { 'uuid': pf.uuid, 'member_type': pf.member_type, 'nickname': pf.nickname, 'signature': pf.signature, 'avatar_index': pf.avatar_index, } 其中某几个 item 需要改成按条件添加,所以直接剪切出来,放到了 if 中再改改改,万万妹想到后面还有个逗号,所以就出现了主帖中的现象,有些 item 的 value 是对的,有些又变成了 tuple 说到底,还是自己太年轻,像 4 楼的老司机 @zq9 就能一看看出破绽来 |