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('...')
原文地址:https://www.cnblogs.com/python-daxiong/p/12791664.html