Django----ORM 基本操作的补偿
from django.db import models
# Create your models here.
class Classes(models.Model):
'''
班级表
'''
titile = models.CharField(max_length=32)
m = models.ManyToManyField("Teacher")
class Teacher(models.Model):
'''
老师表
'''
name = models.CharField(max_length=32)
# 单表的增删改查
# 增
# Teacher.objects.create(name="root")
# obj=Teacher(name="root")
# obj.save()
# 查
# Teacher.objects.all()
# Teacher.objects.filter(id=1)
# Teacher.objects.filter(id=1,name="root")
# Teacher.objects.filter(id__gt=1)
# result=Teacher.objects.filter(id__gt=1).first()
#
# 删
# Teacher.objects.filter(id=1).delete()
#
# 改
# Teacher.objects.all().update(name="alex")
# Teacher.objects.filter(id=1).update(name="alex")
# class C2T(models.Model):
# '''
# 班级和老师之间的关系表
# '''
# cid = models.ForeignKey(Classes)
# tid = models.ForeignKey(Teacher)
#####################################多对多
'''
班级:
id titile
1 1班
2 2班
3 3班
老师:
id name
1 alex
2 dou
3 chou
4 lv
增加
obj1 = Classes.objects.filter(id=1).first()
obj1.m.add(2) # 2就是老师id
obj1.m.add([4,5]) # 4,5就是老师id
obj2 = Classes.objects.filter(id=2).first()
obj2.m.add(2) # 2就是老师id
obj2.m.add([4,5]) # 3,5就是老师id
删除
obj1.m.remove([4,5]) #删除 4,5老师
清空
obj2.m.clear() #删除 将班级id=2的老师全部删除
重置
obj2.m.set([2,3,4]) #将班级id=2的老师设置为id=[2,3,4]
把2班的所有老师列绝出来
obj3 = Class.objects.filter(id=2).first() #得到2班
obj3.id
obj3.titile
ret = obj3.m.all() #ret是一个列表,[老师2(id,name),老师3(id,name),老师4(id,name)]
老师班级关系表
id 班级id 老师id
1 1 2
4 2 2
5 2 3
6 2 4
'''
class Student(models.Model):
'''
学生表
'''
username = models.CharField(max_length=32)
age = models.IntegerField()
gender = models.BooleanField()
cs = models.ForeignKey(Classes,on_delete=models.CASCADE,)
'''
id username age gender cs_id
增加
Student.objects.create(username="aa",age=12,gender="男",cs_id=1)
Student.objects.create(username="aa",age=12,gender="男",cs_id=Classes.objects.filter(id=1).first)
查看
ret = Student.objects.filter(id=1)
for item in ret:
print(item.id)
print(item.username)
print(item.age)
print(item.gender)
print(item.cs_id)
print(item.cs.id)
print(item.cs.name)
删除
Student.objects.filter(id=1).delete()
Student.objects.filter(cs_id=1).delete()
cid = input("请输入班级ID")
Student.objects.filter(cs_id=cid).delete()
cname=input("请输入班级名称")
Student.objects.filter(cs__name=cname).delete() //写filter条件的时候,用__来跨表
修改
Student.objects.filter(cs_id=1).update()
'''
1 类代表数据的表
2 类的对象代指数据库中标的一行记录
3 FK字段代指关联中的一行数据(类的对象)
a,正向查用fk字段
b,反向查,用小写的 类名_set.filter() 。默认是小写的类名_set. 在外键里加上related_name="sss"后,反向查就可以直接用sss来代替 小写的类名_set
4 M2M 字符会自动生成第三张那个表,以来关联表对第三张表简介操作