Django笔记(模型类-管理器)

模型类-管理器

作用: 用于与数据库交互

每个模型类默认有一个管理器,objects
objects是Django自动生成的管理器,可以实现对数据的查询,objects是models.Manger类的一个对象。

为满足特殊条件,可以自定义管理器

1、修改管理器的原始查询集(重写get_queryset()方法)
class BookInfoManager(models.Manager):
    def get_queryset(self):
        return super(BookInfoManager,self).get_queryset().filter(isDelete=False)

自定义管理器之后Django不再生成默认的objects管理器

2、模型类对象的创建方法

BookInfo模型类

from django.db import models


class BookInfo(models.Model):
    btitle=models.CharField(max_length=20)
    bpub_date=models.DateTimeField(db_column='pub_date')
    bread=models.IntegerField(default=0)
    bcomment=models.IntegerField(default=0)
    isDelete=models.BooleanField(default=False)

    class Meta:
        db_table='bookinfo'
    # 管理器的对象作为模型类的一个属性    
    books1=models.Manager()
    books2=BookInfoManager()

模型类中__init__方法不可用

解决方法:

①在模型类中定义一个类方法

@classmethod
def creat(cls,btitle,bpub_date):
  b=BookInfo()
  b.btitle=title
  b.bpub_date=pub_date
  b.bread=0
  b.bcomment=0
  b.isDelete=False
  return b

②在自定义的管理器中定义方法(推荐)

class BookInfoManager(models.Manager):
    def create(self,btitle,bpub_date):
        b=BookInfo()
        b.btitle=title
        b.bpub_date=pub_date
        b.bread=0
        b.bcomment=0
        b.isDelete=False
        return b

调用语法

book=BookInfo.books2.create("abc",date(1980,1,1))
查询

属性__比较符(谓词)=值
btitle__contains='八'

聚合
  • Max,Min,Avg
from django.db.modlels import Max
list = BookInfo.books1.aggregate(Max('bpub_date'))
  • count
count = list.count()
F对象

比较两个字段(普通查询为字段常量比较)

from django.db.modlels import Max,F
list = BookInfo.books1.filter(bread__gt=F('bcomment'))
Q对象

过滤器的参数为逻辑与(&)的关系

若需实现逻辑或|,使用Q对象

from django.db.models import Q
list = BookInfo.books1.filter(Q(pk__lt(4)|Q(btittle__contains='1'))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章