django 模型下的重写方法和对象模型管理器示例
Django 自定义管理器和模型继承
我编写代码时设置的许多数据库都需要一些常用字段,如 is_active、create_time 等。 Field所以我们可以创建基类模型
模型继承
要创建基类模型我们可以充分利用oop函数。以后的所有模型都会继承这个类,所以不需要给每个类添加额外的字段。
12345678910111213141516171819 | 类 BaseModel(模型.Model):
is_active = models.BooleanField(默认)' ' 指定该类为抽象模型类,该模型不会生成表 '''' 抽象 = true ''
元属性可以被覆盖。如果不重写,基类元将被继承。 ''' |
覆盖 Django 的 model.objects
当我们使用 model.objects.filter() 时,我们经常过滤 is_active=False,但是我们的每个过滤器(is_active=True)都必须这样写,所以我们可以重写这个过滤方法,让它每次都从自身过滤。这里可以看到django源码
1234567891011121314151617181920212223242526272829 | #这里就不提取源码了。我们可以看到django设置了该类的实例对象对应的objects属性 class Manager(BaseManager.from_queryset(QuerySet)): '''' o对象为该类的实例对象。我们可以看到这个类实际上继承自QuerySet类。方法, 这样,我们就可以直接重写这个类方法,重写filter方法 '''' def filter (自己 , * args, * * kwargs): """ 我们可以在 QuerySet 中看到这个过滤方法和except 方法都是调用这个方法,这个方法的内部实现大家可以自行查看,可以使用kwargs中的参数 False , * args, * * kwargs) 类 MyManager(models.Manager):
def 过滤器 ( 自我 , * args、 *、* kwargs) : a a a a a a a a a a 过滤器函数's'有一个返回值,所以我们返回的结果超级返回的结果超级即将到来。出去吧,我们只需要在kwargs中添加参数即可 ''' if not kwargs.get( 'is_active' , True ): # 查看所有数据,kwargs.get() 'is_active' , 真 ) ' is_active' ] = 假 返回 超级 (AddressManager , 自己)。筛选准备使用 #我们可以将这些对象编写在基类中,以便所有模型都具有此方法。怎么用要看情况,模型也可以多次继承。如果你有特殊的应用,可以在百度或谷歌上搜索。这里只是简单的介绍一下。对象的概念,很多地方我们可以继承已有的框架类,重写类中的方法,这使得我们的代码更加Pythonic。autoField:根据实际ID自动递增的IntegerField。通常不指定。如果不指定,主键字段会自动添加到模型中 |
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。