我正在关注使用cutom模型管理器的django教程,但无法弄清楚为什么这不起作用。
我正在尝试使用自定义模型管理器来仅过滤在数据库中标记为活动的帖子,因此它不会显示尚未完成的帖子。
模特经理
class PostManager(models.Manager):
def get_query_set(self):
return super(PostManager, self).get_query_set().filter(is_active=True)
模型
class Post(models.Model):
title = models.CharField(max_length = 100)
description = models.TextField(max_length = 500)
body = models.TextField(blank = True)
created = models.DateTimeField(auto_now_add = True)
modified = models.DateTimeField(auto_now_add = True)
is_active = models.BooleanField(default = 1)
allow_comments = models.BooleanField(default = 1)
category= models.ForeignKey(Category)
creator = models.ForeignKey(User)
slug = models.SlugField(unique = True)
active = PostManager() #Gets just the active posts
objects = models.Manager()
然后我尝试使用posts= Post.active.all()
过滤活动帖子
现在,如果我将其更改为posts = Post.active.filter(is_active=True)
它可以正常工作并过滤活动帖子,但我可以在没有自定义管理器的情况下进行此操作。不,了解这里发生了什么。
答案 0 :(得分:3)
内置方法为get_queryset()
而非get_query_set()
,因此您应该覆盖get_queryset()
并调用父级的get_queryset()
方法。
class PostManager(models.Manager):
def get_queryset(self):
return super(PostManager, self).get_queryset().filter(is_active=True)