django中关联(一对多)查询的两种方式,理一理

关联查询有两种方式:一种是创建类对象,通过类对象查询。另外一种是通过模型类查询。两种方式单独看没问题,放一起看就混了。这边我来帮大家理一理

首先:一类和多类要理清:在数据库中,一类中的一条记录对应着多类中的多条记录,多类中保存着可以知道每一条记录对应的一类记录是什么   的关联属性。

第一种方式:类对象查询(属性以id为例),这个比较好理解,你就看哪个类有关联属性就完了

  ①. 知道一类的id,去查询对应的多类的信息:

创建一类的对象,     一类对象.多类类名小写_set.all()

  ②.知道多类的id,去查询对应的一类的信息:

创建多类的对象,     多类对象.关联属性

第二种方式:模型类查询(属性以id为例)

  ①.知道一类的id,去查询对应的多类的信息:

多类类名.objects.filter(多类中的关联属性__id=值)

  ②.知道多类的id,去查询对应的一类的信息:

一类类名.objects.filter(多类类名小写__id=1)

由于模型类查询的方法用的filter,在关联的同时还能加上条件判断,因此工作中基本都是用这种方法。

下面是加上条件判断的模型类查询公式:

(一个英雄有多个技能,每个英雄技能都不一样,英雄类名HeroInfo,技能类名SkiInfo,技能中关联英雄的属性s_hero)

  ①.查询多类信息,对应的一类信息有一个条件判断:

多类类名.objects.filter(多类中的关联属性__一类属性名__条件),例如:查询技能信息,要求英雄的名字中有‘德玛’,

SkiInfo.objects.filter(s_hero__hname__contains='德玛')

  ②.查询一类信息,对应的多类中有一个条件判断:

一类类名.objects.filter(多类类名小写__多类属性名__条件),例如:查询英雄信息,要求技能id小于5

HeroInfo.objects.filter(skiinfo__id__lt=5)

最后对模型类查询来个小总结:

1.想查询哪个类中的信息,就以哪个类名.object.filter开头

2.多类类名开头,filter括号内 关联属性开头。一类类名开头,fulter括号内 多类类名小写开头。后面都是条件判断(如上面的一类有条件判断或多类有条件判断)

原文地址:https://www.cnblogs.com/zzmx0/p/12839511.html