Django表关联对象及多表查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django表关联对象及多表查询相关的知识,希望对你有一定的参考价值。

参考技术A 首先建立Student,Dpartment,Course,Stu_info表

一对多表关系数据的添加:
1.第一种方式就是跟之前的一样,用传参的方法添加,需要注意的是外键的值必须是关联表中已经存在的值.
2.第二种方式是用的属性赋值的方式,因为我们在模型类有定义了一个department的属性,而这个属性的对象的类型必须是department表的类实例对象

表关联对象的访问:
Student的模型类中我们有定义department的属性,所以当我们去访问的时候,可以直接通过student.department的形式去找到某个学生的所属学院是哪个.
那么如果我们也希望在在访问某个学院的实现对象的学生的时候改怎么访问呢???

表关联对象的访问:
可以在定义时设置related_name 参数来覆盖foo_set 的名称.

clear() 从关联的对象集中删除所有的对象

多表查询----跨关联关系的查询:
Django 提供一种强大而又直观的方式来“处理”查询中的关联关系,它在后台自动帮你处理JOIN。 若要跨越关联关系,只需使用关联的模型字段的名称,并使用双下划线分隔,直至你想要的字段:

它还可以反向工作。若要引用一个“反向”的关系,只需要使用该模型的小写的名称。

Django进阶Model篇006 - 多表关联查询

接着前面的例子,举例多表查询实例如下:

1.查询作战的所有完整信息。

>>> AuthorDetail.objects.values(sex,email,address,birthday,author__name)

2.查询《持续集成实践》这本书的作者姓名,还有出版社的名字

>>> Book.objects.filter(title=持续集成实践).values(authors__name,publisher__name)

3.查询潘晓明写了一些什么书

>>> Book.objects.filter(authors__name=潘晓明).values(title)

4.查询机械工业出版社都出版了一些什么书籍

>>> Book.objects.filter(publisher__name=机械工业出版社).values(title)
>>> publisher = Publisher.objects.get(name=机械工业出版社)
>>> publisher.book_set.all().values(‘title‘)

5.查询机械工业出版社都有哪些作者出过书

>>> Book.objects.filter(publisher__name=机械工业出版社).values(title,authors__name)

 

多表查询技巧:

__:两个下划线可以生成连接查询,查询关联的字段信息

_set:提供了对象访问相关联表数据的方法。但这种方法只能是相关类访问定义了关系的类(主键类访问外键类)。

 

以上是关于Django表关联对象及多表查询的主要内容,如果未能解决你的问题,请参考以下文章

Django_多表查询

多表查询

MySQL 表关系及多表操作(联合查询连接查询子查询)

MyBatis--多表关联查询

mybatis多表关联查询

使用数据传输对象避免写多表关联查询