django---一对多和多对多字段的操作训练
建表准备:
django项目models.py建表
from django.db import models
class Myclass(models.Model):
cname = models.CharField(max_length=12)
class Student(models.Model):
sname = models.CharField(max_length=12)
myclass=models.ForeignKey(to='Myclass')
def __str__(self):
return self.sname
class Theacher(models.Model):
tname = models.CharField(max_length=12)
myclass = models.ManyToManyField(to='Myclass')
def __str__(self):
return self.tname
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day66.settings")
import django
django.setup()
from app01.models import Student,Myclass,Theacher
#、查询id=1的班级的所有的学生
#方法1.1、先获取id=1的班级对象反向查找学生对象
# print(Myclass.objects.get(id=1).student_set.all())
# 方法1.2、根据queryset对象反向查找
# print(Myclass.objects.filter(id=1).values('student__sname'))
#方法2、学生对象正向查找班级id=1的学生
# print(Student.objects.filter(myclass__id=1))
#、查找id=2的班级的所有老师
#反向查找基于queryset和对象查找
# print(Myclass.objects.filter(id=2).values('theacher__tname'))
# print(Myclass.objects.get(id=2).theacher_set.all())
# #正向查找
# print(Theacher.objects.filter(myclass__id=2))
#给id=2的班级添加一个id=6的学生,如果学生原本有班级则改成现在班级(学生只能对应一个班级)
# print(Myclass.objects.get(id=2).student_set.add(Student.objects.get(id=6)))
#把所有学生划到1班去
# print(Myclass.objects.get(id=1).student_set.set(Student.objects.all()))
#给id=2的老师添加一个班级
# Theacher.objects.get(id=2).myclass.add(*[2,3])
#把id=2的老师关联的1班清空解除关联关系
# Theacher.objects.get(id=2).myclass.remove(1)
# 把id=2的老师关联的班清空解除关联关系
# Theacher.objects.get(id=2).myclass.clear()
#id = 2的老师现在开设一新班级:PHP
# Theacher.objects.get(id=2).myclass.create(cname='PHP')
#类似方法2先创建课程然后绑定关系
# Myclass.objects.create(cname='GO')
# Theacher.objects.get(id=2).myclass.add(6)
#给id=2的班级添加一个id=3的老师
# Myclass.objects.get(id=2).theacher_set.add(3)
#Myclass.objects.get(id=2).theacher_set.add(Theacher.objects.get(id=3))
#多对多情况add可以直接写id或者对象,一对多的一的那方添加时只能写对象
总结:给一对多添加对象是时,调用者时是一时add只能添加对象,是多的一方是对象和id都可以