day103-django-ORM操作-多对多-自动生成的关联表

1.models.py

from django.db import models

#自动生成的关联表的优点是要写的代码比较少,缺点是关联表只能有三列,适用于简单的情况,
#而自定义的关联表可以写很多列,适用于复杂的情况。
class Teachers(models.Model):
    name = models.CharField(max_length=32)
    #m是连接Classes的通道,在数据库自动创建表app01_teachers_m,
    #字段名是id、teachers_id、classes_id
    m = models.ManyToManyField('Classes')

class Classes(models.Model):
    title = models.CharField(max_length=32)
2. views.py

from django.shortcuts import render,HttpResponse
from app01 import models

def test(request):
    # models.Teachers.objects.create(name='小明')
    # models.Teachers.objects.create(name='小红')
    # models.Teachers.objects.create(name='小方')
    #
    # models.Classes.objects.create(title='全栈1期')
    # models.Classes.objects.create(title='全栈2期')
    # models.Classes.objects.create(title='全栈3期')
    # models.Classes.objects.create(title='全栈4期')

    row = models.Teachers.objects.filter(name='小明').first()

    #
    # app01_teachers_m表的classes_id增加1,2,3,4
    row.m.add(1,2)
    row.m.add(*[3,4])

    #
    # app01_teachers_m表的classes_id删除3,4
    row.m.remove(3,4)
    # row.m.remove(*[3,4])
    #删除全部
    row.m.clear()

    #
    #app01_teachers_m表的classes_id重设为2,3
    row.m.set([2,3])

    #
    #找到Classes表中小明老师任教的所有班级
    classes_list = row.m.all()
    for row in classes_list:
        print(row.title)
    # 找到Classes表中小明老师任教的全栈2期的行
    # row = row.m.filter(title='全栈2期')

    #反向操作
    #找到任教全栈2期的老师都有谁
    row = models.Classes.objects.filter(title='全栈2期').first()
    teachers_list = row.teachers_set.all()
    for row in teachers_list:
        print(row.name)

    return HttpResponse('...')

 

posted @ 2020-04-28 10:07  梁劲雄  阅读(277)  评论(0编辑  收藏  举报