Opened 8 years ago

Closed 5 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@… 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 (19)

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

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset
  • Triage Stage changed from Unreviewed to Design decision needed

comment:2 Changed 8 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 8 years ago by ubernostrum

  • 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 8 years ago by jacob

  • Triage Stage changed from Design decision needed to Someday/Maybe

comment:5 Changed 7 years ago by jakub_vysoky

  • Keywords nfa-changelist added

comment:6 Changed 5 years ago by shoyer

Related: #3152

comment:7 Changed 5 years ago by adamv

  • Owner changed from xian to adamv

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 4 years ago by lrekucki

  • Resolution set to fixed
  • Status changed from new to closed

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 4 years ago by adamnelson

  • Resolution fixed deleted
  • Severity set to Normal
  • Status changed from closed to reopened
  • Type set to 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 4 years ago by boxm

  • 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 4 years ago by adamnelson

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 4 years ago by boxm

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

comment:14 Changed 4 years ago by mitar

  • Cc mmitar@… added
  • UI/UX unset

comment:15 Changed 3 years ago by aaugustin

  • Triage Stage changed from Someday/Maybe to Accepted

comment:16 Changed 3 years ago by anonymous

  • Owner changed from adamv to aaugustin
  • Status changed from reopened to new

comment:17 Changed 3 years ago by aaugustin

  • Owner changed from aaugustin to nobody

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

comment:18 Changed 5 months ago by collinanderson

  • 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 5 months ago by Leonidas-from-XIV

  • Resolution set to fixed
  • Status changed from new to closed
Note: See TracTickets for help on using tickets.
Back to Top