2022-10-01
关联查询:
在Django项目中使用ORM模式设置表后,进行关联查询,即两个表直接有联系的查询。
方式:
可以通过主表查询从表,也可以通过从表查询主表。
----------------
方式一实例:
(1)查询编号为1的图书中的人物
前提环境,进入pycharm,进入虚拟环境、进入shell环境。
首先,需要导入模块,先查询书籍编号为1的图书,后在此书中查询包含的人物。
from book.models import BookInfo1
book = BookInfo1.objects.get(id = 1)
通过主表查询从表信息
book.personinfo_set.all()
注:我的天呐,姐妹们,要注意了,“personinfo_set”后面是没有括号的,不加括号类似于系统默认给定的属性值。大早上的,搞人心态,晕~~~。
说明:其中"personinfo"表中的字段有“id”、“name”、“gender”、“description”、“is_delete”、“book_id”。
--------------------
方式二:
通过从表查看主表,查询人物为1的书籍信息
导入模块,先查询到人物编号为1的记录,在查询信息。
from book.models import PersonInfo
person = PersonInfo.objects.get(id = 1)
person.book
查看所在书籍的名称
person.book.name
------------------------------------------
关联查询的筛选
两种方式:
同上,筛选条件一种是通过主表查询从表,一种是通过从表查询主表。
方式一:
实例:查询图书,要求人物中包含“顾里”
同理,首先需要导入模块,
from book.models import BookInfo1
进行查询:
BookInfo1.objects.filter(personinfo__name = "顾里")
说明:使用到“关联模型表的小写”是因为“BookInfo”是一个主表,默认包含了“personinfo”。如果表中含有外键,那么它是一个从表。
-----------------
方式二:
通过从表查看主表
实例:查询人物,要求是编号为1的书籍中
首先,同理,还是先导入模块,之后由于是从表中所以内部包含了外键,直接通过包含外键的属性“book”进行调用。
from book.models import PersonInfo
PersonInfo.objects.filter(book__id = 1)