[英]Paginator in python django crashes on dict
我有两种从数据库收集的数据:
一个是[<NaseljenoMesto: NaseljenoMesto object>, <NaseljenoMesto: NaseljenoMesto object>]
另一个是: [{'naseljenomesto_drzava__naziv': u'Srbija', 'sifraMesta': u'ZR', 'nazivMesta': u'Zrenjanin', 'id': 3}, {'naseljenomesto _drzava__naziv': u'Srbija', 'sifraMesta': u'BG', 'nazivMesta': u'Beograd', 'id': 1}]
第一个是QuerySet类型,另一个是ValuesQuerySet。
现在我有Paginator: paginator = Paginator(filteredData, rowsPerPage)
在第一种情况下,分页器有效,但在第二次崩溃中。 如何纠正呢?
Internal Server Error: /TestProjekat/main/getFormData/
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\django\core\handlers\base.py", line 115, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Milan\Desktop\DA_LI_RADI\Test projekat\st_forms\views.py", line 238, in getFormData
serializedData = serializers.serialize("json", data)
File "C:\Python27\lib\site-packages\django\core\serializers\__init__.py", line 99, in serialize
s.serialize(queryset, **options)
File "C:\Python27\lib\site-packages\django\core\serializers\base.py", line 46, in serialize
concrete_model = obj._meta.concrete_model
AttributeError: 'dict' object has no attribute '_meta'
paginator = Paginator(filteredData, rowsPerPage)
try:
data = paginator.page(page)
except PageNotAnInteger:
data = paginator.page(1)
except EmptyPage:
data = paginator.page(paginator.num_pages)
serializedData = serializers.serialize("json", data)
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\django\core\handlers\base.py", line 115, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Milan\Desktop\DA_LI_RADI\Test projekat\st_forms\views.py", line 238, in getFormData
serializedData = json.dumps({'data': data})
File "C:\Python27\lib\json\__init__.py", line 243, in dumps
return _default_encoder.encode(obj)
File "C:\Python27\lib\json\encoder.py", line 207, in encode
chunks = self.iterencode(o, _one_shot=True)
File "C:\Python27\lib\json\encoder.py", line 270, in iterencode
return _iterencode(o, 0)
File "C:\Python27\lib\json\encoder.py", line 184, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: <Page 1 of 1> is not JSON serializable
问题不在于分页,而是序列化数据的方式: serializers.serialize
用于序列化Django模型实例(从列表或QuerySet
), QuerySet
没有其他。 您可以使用python stdlib中的json
模块序列化“原始”字典,例如:
import json
print json.dumps({'your': 'dict'})
但是,您可能需要将ValuesQuerySet
转换为ValuesQuerySet
的字典列表,才能说服json
模块正常工作:
# [...]
data = paginator.page(1)
print json.dumps(list(data))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.