Commit 54d50ef5 authored by Gary Wilson Jr's avatar Gary Wilson Jr
Browse files

Made legacy `ObjectPaginator` truly backwards-compatible by catching both...

Made legacy `ObjectPaginator` truly backwards-compatible by catching both `AttributeError` and `TypeError` in `_get_count` as it did before 
[7306].  Tests included.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@7819 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent bcb1c6dc
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -173,7 +173,10 @@ class ObjectPaginator(Paginator):
        if self._count is None:
            try:
                self._count = self.object_list.count()
            except TypeError:
            except (AttributeError, TypeError):
                # AttributeError if object_list has no count() method.
                # TypeError if object_list.count() requires arguments
                # (i.e. is of type list).
                self._count = len(self.object_list)
        return self._count
    count = property(_get_count)
+23 −0
Original line number Diff line number Diff line
@@ -200,6 +200,29 @@ InvalidPage: ...
>>> paginator.page_range
[1]

# ObjectPaginator can be passed lists too.
>>> paginator = ObjectPaginator([1, 2, 3], 5)
>>> paginator.hits
3
>>> paginator.pages
1
>>> paginator.page_range
[1]


# ObjectPaginator can be passed other objects with a count() method.
>>> class Container:
...     def __len__(self):
...         return 42
>>> paginator = ObjectPaginator(Container(), 10)
>>> paginator.hits
42
>>> paginator.pages
5
>>> paginator.page_range
[1, 2, 3, 4, 5]


##################
# Orphan support #
##################