我有一个分页我正在尝试从对象页面获取索引页面(反向分页)
get_paginated_posts 返回模型的分页器Post
:
class PostManager(models.Manager):
def get_paginated_posts(self, request=None):
if request and request.user.has_perm('blog.change_post'):
posts = super(PostManager, self).filter(is_update=False)
else:
posts = super(PostManager, self).filter(publish=True, is_update=False)
return Paginator(posts, POSTS_PER_PAGE)
.
.
这是我的模型
class Post(models.Model):
.
.
.
def get_page(self, request=None):
paginator = Post.objects.get_paginated_posts(request)
for i in range(1, paginator.num_pages+1):
if self in paginator.page(i).object_list:
return i
pass
return False
我关心的是Post.objects.get_paginated_posts
get_page 函数中的调用。从实例
调用类是否正确?Post
有没有其他更好的方法可以做到这一点?
为什么我不能打电话super(Post, self).objects.get_paginated_posts
来做同样的事情?
我知道这self.objects.get_paginated_posts
不会起作用,因为对象无法访问其管理器。
解决了
Tomasz Elendt 建议的最终代码:
class PostManager(models.Manager):
def get_paginated_posts(self, user=None):
if user and user.has_perm('blog.change_post'):
posts = super(PostManager, self).filter(is_update=False)
else:
posts = super(PostManager, self).filter(publish=True, is_update=False)
return Paginator(posts, POSTS_PER_PAGE)
class Post(models.Model):
.
def get_page(self, request=None):
return self._default_manager.filter(is_update = False, time__gt=self.time).count()/POSTS_PER_PAGE +1
#Just a one line now :P