Opened 7 years ago

Closed 7 years ago

#28108 closed Bug (invalid)

new Pagination object create hit to database

Reported by: Oleksandr Shtalinberg Owned by: nobody
Component: Core (Other) Version: 1.11
Severity: Normal Keywords: Pagination
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

This line self._check_object_list_is_ordered()
https://github.com/django/django/commit/c4980e28e57f385d8ffed5e32ce373e52ce61049#diff-bbce48ca2decf49cb1a52079680d2c3aR30
create hit to database when I just create new Pagination object with Django 1.11

https://travis-ci.org/shtalinberg/django-el-pagination/jobs/224166104
Django 1.8-1.10 don't have that bug - all tests success

Change History (1)

comment:1 by Simon Charette, 7 years ago

Resolution: invalid
Status: newclosed

The extraneous query is executed when the UnorderedObjectListWarning message, which includes the queryset representation, is created as shown in your build.

test_num_queries (el_pagination.tests.templatetags.test_el_pagination_tags.LazyPaginateTest) ... /home/travis/build/shtalinberg/django-el-pagination/.tox/py27-dj111/lib/python2.7/site-packages/django/core/paginator.py:112: UnorderedObjectListWarning: Pagination may yield inconsistent results with an unordered object_list: <QuerySet [<TestModel: TestModel: 1>, <TestModel: TestModel: 2>, <TestModel: TestModel: 3>, <TestModel: TestModel: 4>, <TestModel: TestModel: 5>, <TestModel: TestModel: 6>, <TestModel: TestModel: 7>, <TestModel: TestModel: 8>, <TestModel: TestModel: 9>, <TestModel: TestModel: 10>, <TestModel: TestModel: 11>, <TestModel: TestModel: 12>, <TestModel: TestModel: 13>, <TestModel: TestModel: 14>, <TestModel: TestModel: 15>, <TestModel: TestModel: 16>, <TestModel: TestModel: 17>, <TestModel: TestModel: 18>, <TestModel: TestModel: 19>, <TestModel: TestModel: 20>, '...(remaining elements truncated)...']>

Making sure to pass an ordered set of objects to paginate should solve your issue.

This could be done by adding order_by('pk') to the queryset your make_model_instances() function returns.

Note: See TracTickets for help on using tickets.
Back to Top