【问题标题】:Django core: <django.utils.functional.__proxy__ object at ....> is not JSON serializableDjango 核心:<django.utils.functional.__proxy__ object at ....> 不是 JSON 可序列化的
【发布时间】:2016-06-19 21:01:22
【问题描述】:

我正在使用 Django 1.8,在我的一些代码中我只是这样做:

self.request.session['message'] = [
    _(u'Tag!'),
    _(u'Abt!'),
    _(u'Click here to hide this message')]

然后当页面刷新我有这个问题:

<django.utils.functional.__proxy__ object at 0x04805F70> is not JSON serializable

当然,我已经搜索过它,并且我已经阅读了documentation,它说“JSON 仅支持字符串键”和“来自 django.core.signing 的 JSON 序列化程序只能序列化基本数据类型”。

除非我错了,否则由字符串组成的数组是基本数据类型。此外,该代码已经存在 6 个月没有问题。

我错过了什么?

【问题讨论】:

  • 什么是_ugettextugettext_lazy?

标签: json django serialization


【解决方案1】:

您尝试序列化的似乎不是字符串 - 它们是lazy translation objects(即标记为翻译的字符串,尚未评估)。

同一个文件中很可能有一行与此类似:

from django.utils.translation import ugettext_lazy as _

要使用非惰性翻译函数(即它返回翻译后的字符串而不是惰性翻译对象),您应该将其更改为:

from django.utils.translation import ugettext as _

或者,您可以通过在它们上调用str() 来强制评估惰性翻译对象,然后再将它们序列化。

【讨论】:

  • 非常感谢看到你的回答我发现了错误!
  • 没问题。顺便说一句,你看过Django's built-in messages framework 吗?看来你正在手工做一些非常相似的事情。
  • 天啊... Django:包括电池。 2 年前我是一名 PHP 专家,你总是必须手动完成所有工作。这就是为什么我尽我所能解释为什么学生应该远离 Php ......而且我已经在 Django 中手动完成了很多这样的工作,之后发现所有东西都是内置的......
  • 阅读文档后,我几乎完全完成了他们所做的(我的系统是基于会话的)。谢谢你的链接!
  • 我花了半天时间来修复这个错误,你节省了我的时间:)
猜你喜欢
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-13
  • 2019-09-01
  • 2016-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多