Opened 10 years ago

Closed 10 months ago

#4065 closed New feature (fixed)

Ability to disable admin pagination

Reported by: Marek Kubica <pythonmailing@…> Owned by: nobody
Component: contrib.admin Version: master
Severity: Normal Keywords: nfa-changelist
Cc: pythonmailing@…, boxm@…, mmitar@…, cmawebsite@…, Dale Hui Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

Today I needed to disable pagination for Django admin - and ran into trouble, since there is no explicit option to disable it. There is list_per_page but this only controls how many objects are displayed. Its not possible to set it to None because that throws an exception and setting it to 0 creates a ZeroDivisionException which is also not what I wanted. Finally, I set it to sys.maxint, which sure will be enough.

My idea would be to rename this setting (maybe only in newforms-admin not to break backward compatibility) and make None or False the setting for "disable pagination". Of course, this can also be implemented without breakting backwards compatibility, but list_per_page = None sounds odd.

Change History (22)

comment:1 Changed 10 years ago by Gary Wilson <gary.wilson@…>

Triage Stage: UnreviewedDesign decision needed

comment:2 Changed 10 years ago by Marek Kubica <pythonmailing@…>

I created a thread on this in the django-developers Google Group, to find a reasonable solution.

comment:3 Changed 9 years ago by James Bennett

Owner: changed from nobody to xian

neforms-admin should make this easier; assigning to xian just in case he comes up with some template magic for it.

comment:4 Changed 9 years ago by Jacob

Triage Stage: Design decision neededSomeday/Maybe

comment:5 Changed 9 years ago by jakub_vysoky

Keywords: nfa-changelist added

comment:6 Changed 7 years ago by shoyer

Related: #3152

comment:7 Changed 6 years ago by Adam Vandenberg

Owner: changed from xian to Adam Vandenberg

I'm working on a patch for this, basically, the same thing done in r14828, allow custom Paginators, but for the Admin app.

(Possibly there could be a "NullPaginator" class that always put everything on Page 1.)

comment:9 in reply to:  8 Changed 6 years ago by Łukasz Rekucki

Resolution: fixed
Status: newclosed

Replying to kmike:

Isn't this issue fixed?

See http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.paginator

One could argue, that Django should also provide the "NullPaginator" class, but you're right that the main issue here is fixed in Django 1.3

comment:10 Changed 6 years ago by Adam Nelson

Resolution: fixed
Severity: Normal
Status: closedreopened
Type: New feature

It is still not trivial to turn off pagination. This makes ModelAdmin impossible to use on many large tables where select count(*) takes a long time (i.e. 1M+ records on InnoDB tables).

Ideally, there would be a NullPaginator available. A nice to have would be to have an option for a 'next and previous only' paginator that doesn't give page counts or estimates of the total number of records, just next and previous page links.

comment:11 Changed 6 years ago by Malcolm Box

Cc: boxm@… added
Easy pickings: unset

I've been looking at this today and there's quite a few places where the assumption that the paginator is dealing with a countable set is made. Making it work where you don't want to/can't count the number of items in the set means changing:

  1. the {% search %} admin tag
  2. the {% pagination %} admin tag
  3. the ChangeList class (in changelist_view method)
  4. the paginator to one that doesn't implement count, num_pages and page_range properties

1 & 2 can be fixed by overriding the change_list.html template to use alternative template tags (e.g. {% infinite_pagination %}). 3 requires deriving from ModelAdmin and cut'n'pasting the entire method. 4 is available here: http://code.google.com/p/django-pagination/source/browse/trunk/pagination/paginator.py

However this is really ugly and a lot of work for someone.

I think ideally the template tags and ChangeList class should be updated to not assume the ability to access the count, num_pages and page_range properties - ie have an "UncountedPaginator". Possibly this would be a base class of Paginator so you'd have NullPaginator (displays everything) -> UncountedPaginator -> Paginator.

comment:12 Changed 6 years ago by Adam Nelson

I strongly agree with boxm on this one. Counting the number of records is often most onerous for the very sets that need to be paginated. The UncountedPaginator is a great solution.

comment:13 Changed 6 years ago by Malcolm Box

Patch that implements above idea on #8408 - this should enable a NullPaginator to work with admin

comment:14 Changed 5 years ago by Mitar

Cc: mmitar@… added
UI/UX: unset

comment:15 Changed 4 years ago by Aymeric Augustin

Triage Stage: Someday/MaybeAccepted

comment:16 Changed 4 years ago by anonymous

Owner: changed from Adam Vandenberg to Aymeric Augustin
Status: reopenednew

comment:17 Changed 4 years ago by Aymeric Augustin

Owner: changed from Aymeric Augustin to nobody

Please don't assigned tickets to people without their consent. I'm not going to work on this.

comment:18 Changed 23 months ago by Collin Anderson

Cc: cmawebsite@… added

I believe this issue is fixed in 1.8 by the show_full_result_count option (ticket #8408 mentioned above).

https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.show_full_result_count

Can everything else be handled by setting list_per_page to a very large number?

comment:19 Changed 23 months ago by Marek Kubica

Resolution: fixed
Status: newclosed

comment:20 Changed 16 months ago by Dale Hui

Cc: Dale Hui added
Resolution: fixed
Status: closednew

show_full_result_count does not fix the issue as paginator.count is still called:
https://github.com/django/django/blob/1.8.3/django/contrib/admin/views/main.py#L177

comment:21 Changed 10 months ago by Sasha Gaevsky

It does fix the issue, since paginator.count return total number of objects - https://github.com/django/django/blob/1.8.3/django/core/paginator.py#L66

Thus, I believe the ticket could be closed.

comment:22 Changed 10 months ago by Tim Graham

Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.
Back to Top