美文网首页
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