Django 一对多模型添加、查找示例

添加models模型

学生信息表和班级表

学生为多,班级为一

# 班级
class clas(models.Model):
    sclass = models.CharField(max_length=10, verbose_name='班级')

    def __str__(self):
        return self.sclass

    class Meta():
        db_table = 'clas'


# 学生信息表
class students(models.Model):
    choices = (
        (1, '男'),
        (2, '女')
    )
    sid = models.CharField(max_length=10, verbose_name='学号')
    sname = models.CharField(max_length=20, verbose_name='姓名')
    cid = models.ForeignKey(to='clas', on_delete=models.CASCADE)
    sgender = models.BooleanField(choices=choices)
    sage = models.CharField(max_length=2, verbose_name='年龄')
    smajor = models.CharField(max_length=20, verbose_name='专业')
    sbirthday = models.DateTimeField(verbose_name='出生日期')
    creadit_points = models.CharField(max_length=5, null=True, verbose_name='学分')

    def __str__(self):
        return self.sname

    class Meta():
        db_table = 'student'

视图views

增删改查

1.增加学生信息

# 学生添加
def s_add(request):
    if request.method == 'POST':
        sid = request.POST.get('sid')
        sname = request.POST.get('sname')
        sclass = request.POST.get('sclass')
        sgender = request.POST.get('sgender')
        sage = request.POST.get('sage')
        smajor = request.POST.get('smajor')
        sbirthday = request.POST.get('sbirthday')
        creadit_points = request.POST.get('creadit_points')
        students.objects.create(sid=sid, sname=sname, cid=clas(id=sclass),
                                sgender=sgender, sage=sage, smajor=smajor,
                                sbirthday=sbirthday, creadit_points=creadit_points)
        return redirect('student:s_table')
    elif request.method == 'GET':
        clasid = clas.objects.all()
        return render(request, 's_add.html', {'clasids': clasid})
    return render(request, 's_add.html')

2.删除学生信息

# 删除学生信息
def sdelete(request, id):
    if request.method == 'GET':
        students.objects.filter(id=id).delete()
        return redirect('student:s_table')
    return redirect('student:s_table')

3.修改学生信息

# 修改学生信息
def supdate(request, id):
    if request.method == 'GET':
        sids = students.objects.get(id=id)
        return render(request, 'supdate.html', {'stu': sids})
    elif request.method == 'POST':
        sid = request.POST.get('sid')
        sname = request.POST.get('sname')
        sclass = request.POST.get('sclass')
        sgender = request.POST.get('sgender')
        sage = request.POST.get('sage')
        smajor = request.POST.get('smajor')
        sbirthday = request.POST.get('sbirthday')
        creadit_points = request.POST.get('creadit_points')
        stu = {
            'sid': sid,
            'sname': sname,
            'cid': clas.objects.filter(sclass=sclass)[0],
            'sgender': sgender,
            'sage': sage,
            'smajor': smajor,
            'sbirthday': sbirthday,
            'creadit_points': creadit_points
        }
        try:
            students.objects.filter(id=id).update(**stu)
            return redirect('student:s_table')
        except:
            return redirect('student:s_table')

4.查找学生信息

# 对班级进行模糊查找
s_ids = students.objects.filter(cid=clas.objects.filter(sclass__contains=keyword)[0]).all()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值