关联查询
查询书籍为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: 袁紫衣>]>