使用Django搭建一个博客系统5.2——创建QuerySet对象管理器

在上一节课的案例,查询发布时间是2018年中
Post.objects.filter(publish_year=2018)

Post是表,之前在models.py中定义的,objects是每一个模型的默认管理器,filter是查询命令publish_year=2018是查询条件

我们也可以创建一个模型管理器,用来返回一些固定的对象。 这个新的模型管理器可以用来取代objects

打开blog文件夹下的models.py文件

一、先在Post类之前添加一个类,用来过滤所有已经发布的文章

class PublishedManager(models.Manager):#定义PublishedManager类,继承models.Manager,用于过滤所有发布的文章
	def get_queryset(self):#定义get_queryset函数,返回执行过的查询集的方法
		return super(PublishedManager,self).get_queryset().filter(status='published')

return super(PublishedManager,self).get_queryset().filter(status=‘published’)
return 返回结果
super函数是一个已有的函数,用于调用父类
(PublishedManager,self)就是调用的父类,也是正在定义的类,为啥要加self???
get_queryset()是正在定义的函数,这个没有self了????
filter(status=‘published’)是过滤发布的文章

super() 方法的语法:
super(type[, object-or-type])
参数
type – 类。
object-or-type – 类,一般是 self

二、再在Post类中添加两行内容

class Post(models.Model):
	#……………………………………之前的一些内容
	objects=modelsManager()
	published=PublishedManager()
	class Meta:
		#……………………………………之前的一些内容

objects=models.Manager()
published=PublishedManager()
这两行是什么意思呢??
objects其实是默认的管理器??
published是刚才新定义的??现在在这里将这个类实例化

三、改完后,在一级目录下,运行cmd,进行数据同步

python manage.py makemigration blog
python manage.py migrate

四、测试一下

返回到上一节课,5.1的Shell环境下
查询所有已发布的信息:
Post.published.all()

你可能感兴趣的:(使用Django搭建一个博客系统5.2——创建QuerySet对象管理器)