一对多
hbook=models.ForeignKey(‘BookInfo’)
需要定义在多类中
多对多
models.ManyToManyField()
定义在那个类中都可以
一对一
models.OneToOneField()
定义在那个类中都可以
一对多的关联查询
在一对多关系中,一对应关系我们叫做一类,多对应关系我们叫做多类,把多类定义中的建立关联的类属性叫做关联属性
查询图书id为1的所有人物的信息
book=BookInfo.objects.get(id=1)
book.heroinfo_set.all()
也可以这样
HeroInfo.objects.fliter(hbook__id=1)
通过模型类实现关联查询
BookInfo.objects.fliter(heroinfo_hcomment_comstains=“爸”)
查询图书关联的英雄的描述包含爸的
BookInfo.objects.fliter(heroinfo_id_gt=3)
查询图书信息,要求图书的英雄的id大于3
heroInfo.objects.fliter(bookinfo_btitle=“天龙八部”)这是错误的写法
因为在HeroInfo里面我们已经有关联的属性叫做hbook
heroInfo.objects.fliter(hbook_btitle=“天龙八部”)
查询书名为天龙八部的所有英雄,所有的下划线都是双下划线
插入更新删除
调用对象的save方法就能插入和更新
调用对象的delete方法就能删除
自关联
自关联是是一种特殊的一对多关系
比如一个省表一个市表一个县表,可以糅合成一张表,三个字段,id,地名,父级id,这就是自关联。
class AreaInfo(models.Model):
'''地区模型类'''
atitle = models.CharField(max_length=20) # 地区名称
aparent = models.ForeignKey('self',null=True,blank=True) # 关系属性,代表当前地区的父级,默认可以没有父级
批量执行sql语句时:
source xxx.sql
获取 广州市信息:
area=AreaInfo.objetcs.get(atitle=‘广州市’)
查询广州市的上级地区
parent=area.aParent
查询广州市的下级地区
children=area.areinfo_set.all()