day102-django-ORM操作-多对多-自定义关联表
1.models.py
from django.db import models class Teachers(models.Model): name = models.CharField(max_length=32) class Classes(models.Model): title = models.CharField(max_length=32) #自定义关联表 class Teacher2Class(models.Model): teacher = models.ForeignKey('Teachers',on_delete=None) cls = models.ForeignKey('Classes',on_delete=None)
2.views.py from django.shortcuts import render,HttpResponse from app01 import models def test(request): # #添加老师姓名 # obj1 = [ # models.Teachers(name='小明'), # models.Teachers(name='小红'), # models.Teachers(name='小方'), # ] # #批量添加,每次最多5个 # models.Teachers.objects.bulk_create(obj1,5) # # #添加班级 # models.Classes.objects.create(title='全栈1期') # models.Classes.objects.create(title='全栈2期') # models.Classes.objects.create(title='全栈3期') # models.Classes.objects.create(title='全栈4期') # #关联表添加老师id和班级id # models.Teacher2Class.objects.create(teacher_id=1,cls_id=1) # models.Teacher2Class.objects.create(teacher_id=1,cls_id=2) # models.Teacher2Class.objects.create(teacher_id=2,cls_id=2) # models.Teacher2Class.objects.create(teacher_id=2,cls_id=4) # models.Teacher2Class.objects.create(teacher_id=3,cls_id=4) # models.Teacher2Class.objects.create(teacher_id=3,cls_id=3) #查询小明老师教哪几个班级,有4种方法: #推荐使用第四种方法,第一二种方法每循环一次就发一次查询请求,拖慢速度。 #1.从Teacher2Class表中过滤出连表的姓名是小明的行列表,teacher、cls是外键 row_list = models.Teacher2Class.objects.filter(teacher__name='小明') for row in row_list: print(row.cls.title)#该行连表找到班级 #2.从Teachers表中过滤出姓名是小明的行 obj = models.Teachers.objects.filter(name='小明').first() #找到该行跟关联表对应的行列表 row_list = obj.teacher2class_set.all() for row in row_list: print(row.cls.title) #3.从Teacher2Class表中过滤出连表的姓名是小明的行,并且找到连表名是title的字典列表 dic_list = models.Teacher2Class.objects.filter(teacher__name='小明').values('cls__title') for row in dic_list: print(row['cls__title'])
# id teacher_id cls_id cls__title
# 1 1 1 全栈一期
# 2 1 2 全栈二期
#4.从关联表Teacher2Class中过滤出连表名是小明的行,并且通过外键cls连接上Classes表 row_list = models.Teacher2Class.objects.filter(teacher__name='小明').select_related('cls') for row in row_list: print(row.cls.title) return HttpResponse('...')
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
· Linux系列:如何调试 malloc 的底层源码
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· 对象命名为何需要避免'-er'和'-or'后缀
· JDK 24 发布,新特性解读!
· .NET Core奇技淫巧之WinForm使用Python.NET并打包
· Java24你发任你发,我用Java8
· C# 中比较实用的关键字,基础高频面试题!