Opened 14 years ago

Closed 13 years ago

#14348 closed Bug (worksforme)

Paginator does not handle django.db.models.sql.datastructures.EmptyResultSet

Reported by: teh Owned by: nobody
Component: Database layer (models, ORM) Version: 1.2
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: yes Patch needs improvement: yes
Easy pickings: no UI/UX: no

Description

I'd argue that it should be treated as 0 entries, i.e. the allow_empty_first_page is the proper place to catch this.

Attached patch fixes this.

Attachments (1)

0001-Handle-EmptyResultSet-exception-in-paginator.patch (1014 bytes ) - added by teh 14 years ago.

Download all attachments as: .zip

Change History (6)

comment:1 by Gabriel Hurley, 14 years ago

Has patch: set
Needs tests: set
Patch needs improvement: set
Triage Stage: UnreviewedAccepted

I'm curious how you got EmptyResultSet into Paginator to begin with... I thought EmptyResultSet was pretty much only used in the Django internals.

That aside, I wonder if adding a __len__ method on EmptyResultSet might be a better option than catching another exception. Treat the problem, not the symptom, right?

Also, you'll need a unit test for the patch, which would be a good way to demonstrate how EmptyResultSet gets into Paginator...

comment:2 by Alex Gaynor, 14 years ago

Component: Core frameworkDatabase layer (models, ORM)

EmptyResultSet should never escape the ORM internals, if it is *thats* the bug. And that's what we need a test/patch for.

comment:3 by oberrocker, 14 years ago

Just a hint (not a test, I'm afraid):

The problem occurred here when I filtered a queryset with __in using an empty list, e.g.

items = Location.objects.filter(zip__in=[])

The resulting queryset is empty, looking ok otherwise, but feeding it into Paginator causes an EmptyResultSet exception.

Using an empty queryset that was returned by a simple filter works as expected, e.g.

items = Location.objects.filter(name="SOIHFODIHFO")

Hope this helps.

Markus

comment:4 by Julien Phalip, 14 years ago

Severity: Normal
Type: Bug

comment:5 by Claude Paroz, 13 years ago

Easy pickings: unset
Resolution: worksforme
Status: newclosed
UI/UX: unset

I tried with a __in=[] filter, but wasn't able to reproduce it. Until you provide us with a real failing test case, I'm closing it. Don't hesitate to reopen if you have some more concrete use case.

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