我们刚刚升级到Django 1.9,并将其移至内置的JSONfield(用于存储字典)中。但是,当我尝试从中读取数据时,它将返回字典的unicode。
我的JSONfield定义为:
class SmsInfo(models.Model):
[...]
json = JSONField(default=dict)
数据通过以下方式写入:
params = dict(request.POST)
SmsInfo.objects.create([...], json=params, [...])
稍后以这种方式阅读:
incoming_smsses = SmsInfo.objects.select_related('game').defer('game__serialized').filter([...])
此时:
print incoming_smsses[0].json.__class__
退货
<type 'unicode'>
而不是我期望的字典,我的代码崩溃,因为它无法查找任何键。
我已经在这个问题上停留了很多时间,而且我不知道为什么这是错误的。我现在已经使用literal_eval作为一种变通方法,它将Unicode重新转换成字典。现在可以使用,但是我宁愿从源头上解决这个问题!
为什么我的字典在这里变成unicode?
最佳答案
正如erickw在评论中所建议的那样,这已被记录为bug:https://code.djangoproject.com/ticket/27675
如果您之前曾经碰巧使用过django-jsonfield
,则它们之间会有冲突,因此,如上述错误所示,解决方案是完全删除并重新制作使用jsonfield的应用程序的迁移文件。
在这种情况下,显然您也希望卸载django-jsonfield
。
关于python - Django 1.9 JSONfield存储的字典返回unicode代替,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36352721/