美文网首页
Django 模型_模型管理器对象(重写objects类设计自己

Django 模型_模型管理器对象(重写objects类设计自己

作者: 火鸡不肥 | 来源:发表于2019-10-24 16:22 被阅读0次

一 什么是模型管理器对象?

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()查询结果是过滤之后的结果

四 模型管理器对象和模型类的关系

模型类是对数据库文件进行插入操作,通过模型管理器对象进行查询,我们对模型管理器类进行重写,实现数据的过滤或者一些特定的功能

相关文章

网友评论

      本文标题:Django 模型_模型管理器对象(重写objects类设计自己

      本文链接:https://www.haomeiwen.com/subject/owkdvctx.html