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)