关联查询

查询书籍为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: 王语嫣>, <PeopleInfo: 胡斐>, <PeopleInfo: 苗若兰>, <PeopleInfo: 程灵素>, <PeopleInfo: 袁紫衣>]>