oro*_*aki 35 python django json
怎么会出现这个错误呢?我进入了这个:
def json(self):
return json.dumps(
{
'items': self.items
}
)
Run Code Online (Sandbox Code Playgroud)
并得到了这个错误(因为self.items是一个空的查询集(Django)
但是之后,
def json(self):
return json.dumps(
{
'items': [] # Pass in empty list to prove that the error was idiotic.
}
)
Run Code Online (Sandbox Code Playgroud)
工作正常(至少证明错误信息毫无价值)
这是因为查询集定义了repr()并在它为空时返回'[]'作为字符串或类似的荒谬吗?
Vin*_*jip 59
查询集不是开箱即用的可序列化的.如果您尝试list(self.items)而不是仅仅尝试self.items,只要项目本身是JSON可序列化的,那就应该有效.
更新:即使它不为空,也会引发异常.我不认为它会被接受为Django错误,当然你可以尝试; 最简单的答案是强制进行评估list(qs),正如我已经说过的那样.
这非常令人沮丧.Django的序列化抱怨所有不是查询集的东西,json.dumps抱怨来自Django的ORM支持的对象.
>>> from cluster.models import Account
>>> import json
>>> json.dumps(Account.objects.all()[0])
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 201, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 264, in iterencode
return _iterencode(o, 0)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 178, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: <Account: 9de5-2653-000d-81a3 => foo@bar.net> is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
与
>>> serializers.serialize("json", [clusters])
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/serializers/__init__.py", line 91, in serialize
s.serialize(queryset, **options)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/serializers/base.py", line 41, in serialize
for field in obj._meta.local_fields:
AttributeError: 'QuerySet' object has no attribute '_meta'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44396 次 |
| 最近记录: |