一 什么是模型管理器對象?
models.py
class User(models.Model):
name = models.CharField(max_length=12)
age = models.SmallIntegerField()
class Meta:
db_table = "User"
當(dāng)我們對模型類進(jìn)行查詢時使用`類名.objects.all()`獲取此模型類下的所有數(shù)據(jù)
objects
從何而來?
因為objects是django自動生成的管理器對象般婆,通過這個對象可以實現(xiàn)對數(shù)據(jù)的查詢
objects是models.manager 類的一個對象晤硕,我們可以自定義這個對象,自定義后系統(tǒng)就不在為我們自動生成
二 創(chuàng)建自己的管理器對象
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
中進(jìn)行創(chuàng)建:user2=models.Manager()
注意新建哪個類的管理器對象就需要在哪個類中寫
此時我們再用objects進(jìn)行查詢就會報錯
因為我們自定義對象后系統(tǒng)就不會自動為我們生成objects
對象
但是此時可以用我們寫的user2
對象進(jìn)行操作 User.user2.all()
三 繼承Manager的類的重寫
class MiddleWareManager(models.Manager): # 繼承models.Manager
# 重新all()方法
def all(self):
return super().all().filter(age__lte=19) # 調(diào)用父類的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()
查詢結(jié)果是過濾之后的結(jié)果
四 模型管理器對象和模型類的關(guān)系
模型類是對數(shù)據(jù)庫文件進(jìn)行插入操作块仆,通過模型管理器對象進(jìn)行查詢贤牛,我們對模型管理器類進(jìn)行重寫惋鹅,實現(xiàn)數(shù)據(jù)的過濾或者一些特定的功能