11 模型类关系 关联查询

模型类跟表一样有三种同样的关系:

1、一对多

例:图书类-英雄类

models.ForeignKey()  定义在多的类中

2、多对多

例:新闻类-新闻类型类  体育新闻  国际

models.ManyToManyField()  定义在哪个类中都可以

3、一对一

例:员工基本信息类-员工详细信息类. 员工工号

models.OneToOneField()  定义在哪个类中都可以

 

关联查询(一对多)

【查询跟一个对象关联的信息】

在一对多关系中,一对应的类叫一类,多对应的类叫多类,把多类中定义的建立关联的类属性叫关联属性。

例:查询图书id为1的所有英雄信息:

b = BookInfo.objects.get(id=1)

b.heroinfo_set.all()

换成用类模型查询:

HeroInfo.objects.filter(hbook__id=1)

例:查询id为1的英雄关联的图书:

h = HeroInfo.objects.get(id=1)

h.hbook

换成用类模型查询:

BookInfo.objects.filter(heroinfo__id=1)

 

【通过模型类实现关联查询】

通过模型类查询时,最终要拿到哪个类中的数据,就用哪个类来查

写关联查询条件时,如果类中没有关系属性,条件需要写对应类的名字(小写),如果有关系属性,则直接写关系属性,例如HeroInfo中的hbook就是一个关系属性(外键)。

 

例:查询图书信息,要求图书中关联的英雄的描述包含‘八’:

BookInfo.objects.filter(heroinfo__hcomment__contains='八')

例:查询图书信息,要求图书中的英雄id大于3:

BookInfo.objects.filter(heroinfo__id__gt=3)

注意:关系属性在heroinfo中,不在BookInfo中,所以在BookInfo中查询HeroInfo,要用小写的类名:heroinfo查询HeroInfo

例:查询书名为‘天龙八部’的所有英雄:

HeroInfo.objects.filter(hbook__btitle='天龙八部')

注意:关系属性hbook在heroinfo中,所以在heroinfo中查询BookInfo,要用关系属性hbook查询BookInfo

 

posted @ 2019-08-06 02:45  greenfan  阅读(187)  评论(0)    收藏  举报