Django模型-关联查询

关系型数据库的关系包括三种类型:

            ForeignKey:一对多,将字段定义在多的一端中。

            ManyToManyField:多对多,将字段定义在任意一端中。

            OneToOneField:一对一,将字段定义在任意一端中。

    可以维护递归的关联关系,使用'self'指定,详见"自关联"。

一对一关系示例:一个学生对应一个学生档案材料,或者每个人都有唯一的身份证编号。

一对多关系示例:一个学生只属于一个班,但是一个学院有多名学生。

多对多关系示例:一个学生可以选择多门课,一门课也有多名学生。区别在于我们写一对多关系的时候  我们把外键 在多那一方;    多对多关系 :  外键关系  -----两边都行

                                      关联查询

Django中也能实现类似于join查询。

通过对象执行关联查询

在定义模型类时,可以指定三种关联关系,最常用的是一对多关系,如本例中的"图书-人物"就为一对多关系

进入shell练习关系的查询

             python manage.py shell

由一到多的访问语法

一对应的模型类对象.多对应的模型类名小写_set

           例:   b = BookInfo.objects.get(id=1)b.heroinfo_set.all()

由多到一的访问语法

多对应的模型类对象.多对应的模型类中的关系类属性名

           例:h = HeroInfo.objects.get(id=1)h.hbook

访问一对应的模型类关联对象的id语法

多对应的模型类对象.关联类属性_id

          例: h = HeroInfo.objects.get(id=1)h.book_id

例:查询编号为1的图书。

          book=BookInfo.objects.get(pk=1)

例:获得book图书的所有英雄。

          book.heroinfo_set.all()

例:获得编号为1的英雄。

          hero=HeroInfo.objects.get(pk=1)

例:获得hero英雄出自的图书。

          hero.hbook

由多模型类条件查询一模型类数据

语法如下:

           关联模型类名小写__属性名__条件运算符=值

           如果没有"__运算符"部分,表示等于,结果和sql中的inner join相同。

例:查询图书,要求图书中英雄的描述包含'八'。

           list = BookInfo.objects.filter(heroinfo__hcontent__contains='八')

由一模型类条件查询多模型类数据

语法如下:

            一模型类关联属性名__一模型类属性名__条件运算符=值

例:查询书名为“天龙八部”的所有英雄。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容