zoukankan      html  css  js  c++  java
  • 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('...')
  • 相关阅读:
    开源的免费的对比工具
    win10 git bash 配置
    Java SSH 不使用终端也能调用环境变量中的指令
    MySQL WITH ROLLUP
    docker安装postgres
    开源的应用容器引擎
    清除浮动有哪几种方法
    js中的yield
    git的速学了解
    string/stringBuffer/StringBuilder的区别
  • 原文地址:https://www.cnblogs.com/python-daxiong/p/12791664.html
Copyright © 2011-2022 走看看