django项目之多对多等知识点

老师管理系统

1.创建数据库,并写入迁移

#创建教师表
class Teacher(models.Model):
    #教师名
    name=models.CharField(max_length=65)
    #教师密码
    password=models.CharField(max_length=128)

#创建学生表
class Student(models.Model):
    #学生名
    name = models.CharField(max_length=65)
    #年龄
    age = models.IntegerField()
    #绑定教师
    teacher=models.ManyToManyField(to='Teacher')

注:其中 #绑定教师
teacher=models.ManyToManyField(to=‘Teacher’)为多对多

2.添加学生信息是应用到了多对多,例如:

# 添加学生
def add_student(request):
    if request.method == 'GET':
        return render(request, 'add_student.html', locals())
    if request.method == 'POST':
        name = request.POST.get('name')
        age = request.POST.get('age')
        #存入数据库
        student = models.Student()
        student.name = name
        student.age = age
        student.save()
        #多对多进行学生与教师绑定
        student.teacher.add(request.session['id'])
        student.save()
        return render(request, 'add_student.html', locals())

、、另外删除也会用到

# 删除
def delete_student(request):
    id = request.GET.get('id')
    s_obj = models.Student.objects.filter(id=int(id)).first()
    s_obj.teacher.remove(request.session['id'])
    s_obj.save()
    return redirect('/my_student/')

3.反向查询,例如:

# 展示自己的学生
def my_student(request):
#teacher__id双下划线进行反向查询
    student_obj_list = models.Student.objects.filter(teacher__id=request.session['id']).all()
    return render(request, 'my_student.html', locals())

4.for循环进行查询

# 未加入的学生
def no_student(request):
    student_obj = models.Student.objects.all()
    student_obj_list = []
    for obj in student_obj:
        if obj.teacher.all():
            pass
        else:
            student_obj_list.append(obj)
    return render(request, 'no_student.html', locals())

5.分页器

# 展示所有学生
def student_all(request):
    if request.method == 'POST':
        name = request.POST.get('name')
        student_obj_list = []
        student_obj_l = models.Student.objects.filter(name__icontains=name).all()
        for obj in student_obj_l:
            if obj.teacher.all():
                pass
            else:
                student_obj_list.append(obj)
        return render(request, 'student_all.html', locals())
        #分页器
    page = request.GET.get('page', 1)
    student_obj_l = models.Student.objects.all()
    pageinator = Paginator(student_obj_l, 3)
    student_obj_list = pageinator.page(page)
    page_range = pageinator.page_range

    return render(request, 'student_all.html', locals())

在这里插入图片描述
6.搜索

 if request.method == 'POST':
        name = request.POST.get('name')
        student_obj_list = []
        student_obj_l = models.Student.objects.filter(name__icontains=name).all()
        for obj in student_obj_l:
            if obj.teacher.all():
                pass
            else:
                student_obj_list.append(obj)
        return render(request, 'student_all.html', locals())

在这里插入图片描述

7.正序倒叙排列

#在可以进行排序的列表里的指定位置加入例如:order_by(-age)
order_by
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值