繁体   English   中英

Python Django中的Paginator在dict上崩溃

[英]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'

编辑2

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM