Django的数据库中表的一对多关系

表之间数据的一对多关系: 一个班级对应多个学生

一: 建立一个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('//')













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

她最爱橘了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值