一 什么是模型管理器对象?
models.py
class User(models.Model):
name = models.CharField(max_length=12)
age = models.SmallIntegerField()
class Meta:
db_table = "User"
当我们对模型类进行查询时使用`类名.objects.all()`获取此模型类下的所有数据
objects
从何而来?
因为objects是django自动生成的管理器对象,通过这个对象可以实现对数据的查询
objects是models.manager 类的一个对象,我们可以自定义这个对象,自定义后系统就不在为我们自动生成
二 创建自己的管理器对象
models.py
class User(models.Model):
name = models.CharField(max_length=12)
age = models.SmallIntegerField()
user2=models.Manager()
class Meta:
db_table = "User"
在models.py
中进行创建:user2=models.Manager()
注意新建哪个类的管理器对象就需要在哪个类中写
此时我们再用objects进行查询就会报错
因为我们自定义对象后系统就不会自动为我们生成objects
对象
但是此时可以用我们写的user2
对象进行操作 User.user2.all()
三 继承Manager的类的重写
class MiddleWareManager(models.Manager): # 继承models.Manager
# 重新all()方法
def all(self):
return super().all().filter(age__lte=19) # 调用父类的all()方法, 并过滤
class User(models.Model):
name = models.CharField(max_length=12)
age = models.SmallIntegerField()
objects = MiddleWareManager() # 新建MiddleWareManager的对象
class Meta:
db_table = "User"
再使用User.objects.all()
查询结果是过滤之后的结果
四 模型管理器对象和模型类的关系
模型类是对数据库文件进行插入操作,通过模型管理器对象进行查询,我们对模型管理器类进行重写,实现数据的过滤或者一些特定的功能
网友评论