表之间数据的一对多关系: 一个班级对应多个学生
一: 建立一个app, 在models.py文件中, 创建相关的表
# 班级表(主表)
class Classes(models.Model):
cname = models.CharField(max_length=50)
cnumber = models.IntegerField(null=False)
class Meta:
db_table = 'classes'
class Students(models.Model):
sname = models.CharField(max_length=20)
sage = models.IntegerField(null=True)
sex = models.BooleanField(choices=((True,'男'),(False,'女')),default=True)
# 建立和班级的一对多关系
# 通过设置外键建立一对多关系
classes = models.ForeignKey(Classes,on_delete=models.CASCADE)
class Meta:
db_table = 'students'
关键字: Foreignkey
二: 在views.py文件中, 对表进行操作
from django.shortcuts import render,HttpResponse
from .models import Classes,Students
# Create your views here.
def add(request):
# 先创建classes数据
c1 = Classes(cname='python7',cnumber=22)
c1.save()
c2 = Classes(cname='python8',cnumber=35)
c2.save()
c3 = Classes(cname='python9',cnumber=30)
c3.save()
s1 = Students(classes=c1,sname='张三',sage=22,sex=1)
s1.save()
s1 = Students(classes=c1,sname='李四', sage=21, sex=0)
s1.save()
s1 = Students(classes=c1,sname='王五', sage=23, sex=1)
s1.save()
s1 = Students(classes=c2,sname='赵六', sage=24, sex=0)
s1.save()
s1 = Students(classes=c3,sname='赵四', sage=21, sex=1)
s1.save()
s1 = Students(classes=c3,sname='刘能', sage=23, sex=1)
s1.save()
s1 = Students(classes=c3,sname='谢大脚', sage=20, sex=0)
s1.save()
return HttpResponse('成功....')
def select(request):
#1.根据从表数据查询主表数据
s = Students.objects.get(id=8)
# 获取主表数据
print(s.classes.cname)
print(s.classes.cnumber)
# 2.查询赵四所在的班级及班级人数
s2 = Students.objects.get(sname='赵四')
print(s2.classes.cname)
print(s2.classes.cnumber)
# 3.查询赵四所在班级的所有学员
# res = Students.objects.filter(classes=s2.classes)
# 获取班级对应的所有学员集合
# classes.students_set 班级对应的学员集合
res = s2.classes.students_set.all()
for r in res:
print(r.sname)
# 根据班级名称查找所有的学员
# c2 = Classes.objects.get(id=4)
# Students.objects.filter(classes=c2)
# 等同于下面这种写法
c2 = Classes.objects.get(cname='python7期')
res = c2.students_set.all()
# c2.students_set.filter()
# c2.students_set.get()
for r in res:
print(r.sname)
return HttpResponse('///')
def delete(request):
# 直接删除主表中的数据
# 从表中有数据的外键对应这个主表数据,会一并把从表中的数据进行删除(先删除从表数据,再删除主表数据)
# Classes.objects.get(id=4).delete()
# 删除从表中的数据,不会对主表数据造成影响
Students.objects.get(sname='赵四').delete()
return HttpResponse('//')