我们刚刚升级到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/

10-15 18:04