オブジェクトページからインデックスページを取得しようとしているページ付けがあります(逆のページ付けのようなものです)
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