默认管理器
每一个模型类都拥有一个默认管理器,如果不指定默认管理器,默认使用object
from booktest.models import BookInfo
BookInfo.objects.all()
如果想要指定相对应的管理器,管理器的对象为models.Manager
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, null = False)
isDelete = models.BooleanField(default=False)
class Meta:
db_table = 'bookinfo'
def __str__(self):
return self.btitle
book1 = models.Manager()
此时就是指定boo1为BookInfo模型管理器
自定义管理器
除了默认的管理器意外,我们还可以自定义管理器
修改默认的查询集
class BookInfoManager(models.Manager):
def get_queryset(self):
return super(BookInfoManager, self).get_queryset().filter(isDelete = False)
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, null = False)
isDelete = models.BooleanField(default=False)
class Meta:
db_table = 'bookinfo'
def __str__(self):
return self.btitle
book1 = models.Manager()
book2 = BookInfoManager()
创建添加的方法
class BookInfoManager(models.Manager):
def get_queryset(self):
return super(BookInfoManager, self).get_queryset().filter(isDelete = False)
def create(self, btitle, bpub_date):
b = BookInfo()
b.btitle = btitle
b.bpub_date = bpub_date
b.bread = 0
b.bcomment = 0
b.isDelete = False
return b
模型查询
常用函数
- all():返回所有的数据
- filter():过滤满足条件的数据
- exclude():过滤不满足条件的数据
- get():返回单个满足条件的值
注意:get()只能返回结果是唯一的情况。 如果结果不唯一,则会抛出MultipleObjectsReturned异常 如果找不到,会抛出DoesNotExist异常 - order_by():排序
- values():把对象中的属性构造成字典,并返回列表
- count():返回查询的总条数
- first():返回第一个对象
- last():返回最后一个对象
- exists():查询结果中是否存在数据
子查询运算符
格式:属性名_ _比较运算符 = 值
- exact:判断相等。如果没有写就是exact
- contains:是否包含某个子串
- startswith:以某个子串开头
- endswith:以某个子串结尾
- isnull:为空
- isnotnull:不为空
- in:是否包含在范围内
- gt:大于
- gte:大于等于
- lt:小于
- lte:小于等于
聚合函数
使用aggregate()函数返回聚合函数中的值 聚合函数包括:
- Avg():求平均
- Count():总数
- Max():最大值
- Min():最小值
- Sum():总和
F对象与Q对象
- F对象
一般情况下,字段都是写在等号的左边,如果要把字段写在等号的右边,需要使用F对象 - Q对象
如果要进行或操作,需要使用Q对象
|