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

浙公网安备 33010602011771号