一、关系表的数据操作
关系表中的数据操作
查看数据库中的表结构
一对多表关系数据的添加:
1. 第一种方式就是跟之前一样,用传参的方法添加,需要注意的是外键的值必须是关联表中已存在的值;
2. 第二种方式是用的属性赋值方式,因为我们在模型类有定义了一个department的属性,而这个属性的对象类型必须是department表的类实例对象。
from django.http import HttpResponse from .models import Department, Student, Stu_detail, Course def test(request): # 往department表里面插入数据 d1 = Department(d_name='文学院') d1.save() # 往student数据表里插入数据 s1 = Student(s_name='凯西', dept_id=1) s1.save() s2 = Student(s_name='小红') s2.dept =d1 s2.save() return HttpResponse('xxxx')
二、表关联对象的访问
Student的模型类中我们有定义department属性,所以当我们去访问的时候,可以直接通过student.department的形式1去找到某个学生的所属学院是哪个。那么如果我们也希望在访问某个学院的实现对象的学生的时候,改怎么访问呢?
如果模型1有一个ForeignKey,那么该ForeigKey所指的模型2实例可以通过一个管理器回前面有ForeigKey的模型1的所有实例。默认情况下,这个管理器的名字为foo_set,其中foo是源模型的小写名称。
可以在定义时设置related_name参数来覆盖foo_setd 名称。
处理关联对象的一些方法:
add(obj1, obj2, ...)添加的已经存在数据库的数据,添加一指定的模型对象到关联的对象集中。
1. d1.student的管理器有add的方法;
2. 例子中的s2能添加成功是因为设置了student表中department字段允许为空了。
三、多表查询
Django提供一种强大而又直观的方式来“处理”查询中的关联关系,它在后台自动帮你处理JOIN。若要跨越关联关系,只需使用关联的模型字段的名称,并使用双下划线分隔,直至你想要的字段:
# 查询学院名字为“计算机学院”的学生的信息
Student.objects.filter(department__d_name='计算机学院')
它还可以反向工作。若要引用一个“反向”的关系,只需要使用该模型的小写的名称。
# 查询学生名字中包含“小”的学生的学院信息
Department.objects.filter(student__s_name__contains='小')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!