一下介绍的数据和字段 都在此文中进行的 创建和添加

1. 聚合函数

使用aggregate()过滤器调用聚合函数。聚合函数包括:Avg平均,Count数量,Max最大,Min最小,Sum求和,被定义在django.db.models中。

  • 例:查询图书的总阅读量。
from django.db.models import Sum
BookInfo.objects.aggregate(Sum('readcount'))

{'readcount__sum': 126}

注意aggregate的返回值是一个字典类型,格式如下:

{'属性名__聚合类小写':值}

如:{‘readcount__sum’: 126}

使用count 时一般不使用aggregate()过滤器。

  • 例:查询图书总数。
BookInfo.objects.count()

注意count函数的返回值是一个数字。

2. 排序

使用order_by对结果进行排序

# 默认升序

BookInfo.objects.all().order_by('readcount')

<QuerySet [<BookInfo: 射雕英雄传>, <BookInfo: 笑傲江湖>, <BookInfo: 天龙八部>, <BookInfo: 雪山飞狐>]>
# 降序

BookInfo.objects.all().order_by('-readcount')
<QuerySet [<BookInfo: 雪山飞狐>, <BookInfo: 天龙八部>, <BookInfo: 笑傲江湖>, <BookInfo: 射雕英雄传>]>





关联查询

查询书籍为1的所有人物信息
查询人物为1的书籍信息

  • 由一到多的访问语法:
    一对应的模型类对象.多对应的模型类名小写_set 例:
book = BookInfo.objects.get(id=1)
book.peopleinfo_set.all()

<QuerySet [<PeopleInfo: 郭靖>, <PeopleInfo: 黄蓉>, <PeopleInfo: 黄药师>, <PeopleInfo: 欧阳锋>, <PeopleInfo: 梅超风>]>
  • 由多到一的访问语法:
    多对应的模型类对象.多对应的模型类中的关系类属性名 例:
person = PeopleInfo.objects.get(id=1)
person.book

<BookInfo: 射雕英雄传>
访问一对应的模型类关联对象的id语法:

多对应的模型类对象.关联类属性_id

  • 例:
person = PeopleInfo.objects.get(id=1)
person.book_id

1
关联过滤查询

由多模型类条件查询一模型类数据:

语法如下:

关联模型类名小写__属性名__条件运算符=值

注意:如果没有"__运算符"部分,表示等于。

查询图书,要求图书人物为"郭靖"
查询图书,要求图书中人物的描述包含"八"

  • 例:查询图书,要求图书人物为"郭靖"
book = BookInfo.objects.filter(peopleinfo__name='郭靖')
book

<QuerySet [<BookInfo: 射雕英雄传>]>
  • 查询图书,要求图书中人物的描述包含"八"
book = BookInfo.objects.filter(peopleinfo__description__contains='八')
book

<QuerySet [<BookInfo: 射雕英雄传>, <BookInfo: 天龙八部>]>
由一模型类条件查询多模型类数据:

语法如下:

一模型类关联属性名__一模型类属性名__条件运算符=值

注意:如果没有"__运算符"部分,表示等于。

查询书名为“天龙八部”的所有人物
查询图书阅读量大于30的所有人物

  • 例:查询书名为“天龙八部”的所有人物。
people = PeopleInfo.objects.filter(book__name='天龙八部')
people

<QuerySet [<PeopleInfo: 乔峰>, <PeopleInfo: 段誉>, <PeopleInfo: 虚竹>, <PeopleInfo: 王语嫣>]>
  • 查询图书阅读量大于30的所有人物
people = PeopleInfo.objects.filter(book__readcount__gt=30)
people

<QuerySet [<PeopleInfo: 乔峰>, <PeopleInfo: 段誉>, <PeopleInfo: 虚竹>, <PeopleInfo: 王语嫣>, <PeopleIn