ORM版学员管理系统2

学生信息管理

展示学生信息

URL部分

url(r‘^student_list/‘, app01_views.student_list, name="student_list"),

视图部分

def student_list(request):
    student_list = models.Student.objects.all()
    return render(request, "student_list.html", {"student_list": student_list})

前端部分

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>学生列表</title>
</head>
<body>
<a href="{% url ‘add_student‘ %}">添加学生</a>
<table border="1">
  <thead>
  <tr>
    <th>#</th>
    <th>id</th>
    <th>学生姓名</th>
    <th>学生班级</th>
    <th>开班日期</th>
    <th>操作</th>
  </tr>
  </thead>
  <tbody>
  {% for student in student_list%}
  <tr>
  <td>{{ forloop.counter}}</td>
  <td>{{ student.id }}</td>
  <td>{{ student.sname }}</td>
  <td>{{ student.cid.cname }}</td>
  <td>{{ student.cid.first_day|date:‘Y-m-d‘ }}</td>
  <td>
    <a href="{% url ‘delete_student‘ student.id %}">删除</a>
    <a href="{% url ‘edit_student‘ student.id %}">编辑</a>
  </td>
  </tr>
  {% endfor %}
  </tbody>
</table>
</body>
</html>

删除学生信息

URL部分

url(r‘^delete_student/(?P<sid>\d+)$‘, app01_views.delete_student, name="delete_student"),

视图部分

def delete_student(request, sid):
    models.Student.objects.filter(id=sid).delete()
    return redirect(reverse("student_list"))

前端部分

<a href="{% url ‘delete_student‘ student.id %}">删除</a>

添加学生信息

URL部分

url(r‘^add_student/$‘, app01_views.add_student, name="add_student"),

视图部分

def add_student(request):
    if request.method == "POST":
        sname = request.POST.get("sname")
        class_id = request.POST.get("class_id")
        models.Student.objects.create(sname=sname, cid_id=class_id)
        return redirect(reverse("student_list"))

    class_list = models.Class.objects.all()
    return render(request, "add_student.html", {"class_list": class_list})

前端部分

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>添加学生</title>
</head>
<body>
<form action="{% url ‘add_student‘ %}" method="post">
  {% csrf_token %}
  <p>学生姓名:<input type="text" name="sname"></p>
  <label for="class_id">所在班级:</label>
    <select name="class_id" id="class_id">
      {% for class in class_list %}
        <option value="{{ class.id }}">{{ class.cname }}</option>
      {% endfor %}
    </select>
    <p><input type="submit" value="提交"></p>
</form>
</body>
</html>

编辑学生信息

URL部分

url(r‘^edit_student/(?P<sid>\d+)$‘, app01_views.edit_student, name="edit_student"),

视图部分

def edit_student(request, sid):
    # 获取到编辑的学生对象
    student_obj = models.Student.objects.get(id=sid)
    # 获取所有的班级数据
    class_list = models.Class.objects.all()

    if request.method == "POST":
        sname = request.POST.get("sname")
        class_id = request.POST.get("class_id")
        student_obj.sname = sname
        student_obj.cid_id = class_id
        student_obj.save()
        return redirect(reverse("student_list"))

    return render(request, "edit_student.html", {"student": student_obj, "class_list": class_list})

前端部分

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>编辑学生信息</title>
</head>
<body>
<form action="{% url ‘edit_student‘ student.id %}" method="post">
  {% csrf_token %}
  <p>学生姓名:<input type="text" name="sname" value="{{ student.sname }}"></p>
  <label for="class_id">所在班级:</label>
  <select name="class_id" id="class_id">
    {% for class in class_list %}
      {% if class.id == student.cid_id %}
        <option value="{{ class.id }}" selected>{{ class.cname }}</option>
      {% else %}
        <option value="{{ class.id }}">{{ class.cname }}</option>
      {% endif %}
    {% endfor %}
  </select>
  <p><input type="submit" value="提交"></p>
</form>
</body>
</html>

基于对象的跨表查询

一对多查询(班级表和学生表)

正向查询(由学生表查询班级表)

查询学生的班级信息

>>> student_obj = models.Student.objects.first()
>>> student_obj.cid  # 通过model类中的属性查找到对应的外键数据对象
<Class: Class object>
>>> student_obj.cid.cname
‘1班‘
>>> student_obj.cid_id  # 获取实际外键的值
1

反向查询(由班级表查询学生表)

查询班级的学生信息

>>> class_obj = models.Class.objects.first()  # 获取第一个班级对象
>>> class_obj.student_set.all()  # 通过表名_set反向查询出所有的学生
<QuerySet [<Student: Student object>, <Student: Student object>]>

注意:

如果不在外键的字段中设置related_name的话,默认就用表名_set。

如果设置了related_name="students",反向查询时可直接使用students进行反向查询。

>>> class_obj.students.all() 

一对一查询

表结构设计

class Student(models.Model):
    sname = models.CharField(max_length=32, verbose_name="学生姓名")
    the_class = models.ForeignKey(to=Class, to_field="id", on_delete=models.CASCADE, related_name="students")
    detail = models.OneToOneField(to="StudentDetail", null=True)

class StudentDetail(models.Model):
    height = models.PositiveIntegerField()
    weight = models.PositiveIntegerField()
    email = models.EmailField()

正向查询(由学生信息表查询学生详情表)

>>> student_obj = models.Student.objects.first()
>>> student_obj.detail.email
‘[email protected]‘

反向查询(由学生详情表反向查询学生信息表)

>>> detail_obj = models.StudentDetail.objects.get(id=1)
>>> detail_obj.student.sname
‘a‘

原文地址:https://www.cnblogs.com/flashpoint3/p/8666595.html

时间: 2024-07-31 19:50:55

ORM版学员管理系统2的相关文章

ORM版学员管理系统

ORM版学员管理系统 班级表 表结构 class Class(models.Model): id = models.AutoField(primary_key=True) # 主键 cname = models.CharField(max_length=32) # 班级名称 first_day = models.DateField() # 开班时间 查询班级 URL部分: url(r'^class_list/$', views.class_list, name="class_list"

ORM版学员管理系统3

老师信息管理 思考 三种方式创建多对多外键方式及其优缺点. 通过外键创建 class Class(models.Model): id = models.AutoField(primary_key=True) # 主键 cname = models.CharField(max_length=32) # 班级名称 first_day = models.DateField() # 开班时间 class Teacher(models.Model): tname = models.CharField(ma

ORM版学生管理系统

ORM的数据库操作: 1.创建数据库 2.在项目的_init_.py文件中执行: 1 import pymysql 2 pymysql.install_as_MySQLdb() 3.在settings.py文件中连接数据库(共6步) DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'tmp', 'USER': 'root', 'PASSWORD': 'admin', 'HOST': 'localho

python基础入门之十八 —— 面向对象版学员管理系统

main.py: from StudentMannager.manager import * if __name__ == '__main__': student_manager = Manager() student_manager.run() manager.py: from StudentMannager.student import * class Manager(object): def __init__(self): self.stu_list = [] # 一. 程序入口函数 de

python3开发进阶-Django框架学习前的小项目(一个简单的学员管理系统)

''' 自己独立写一个学员管理系统 表结构: 班级表: -id -grade_name 学生表: -id -student_name -grade 关联外键班级表 老师表: -id -teacher_name -grades (多对多 关联班级表) ''' 在写小项目之前我们先复习一下小知识: 1. form表单提交数据的注意事项: 是form不是from,必须要有method和action 所有获取用户输入的表单标签要放在form表单里面,表单标签必须要有name属性 form表单必须要有su

Python 程序:学员管理系统

Python 程序:学员管理系统 1.需求 2.表结构 3.readme 4.目录结构 5.代码 6.测试样图 一.需求 需求: 角色,讲师\学员, 用户登陆后根据角色不同,能做的事情不同,分别如下 讲师视图: 管理班级,可创建班级,根据学员qq号把学员加入班级 可创建指定班级的上课纪录,注意一节上课纪录对应多条学员的上课纪录, 即每节课都有整班学员上, 为了纪录每位学员的学习成绩,需在创建每节上课纪录是,同时为这个班的每位学员创建一条上课纪录 为学员批改成绩, 一条一条的手动修改成绩 学员视图

mysql开发简单的学员管理系统

主题:学员管理系统 需求: 用户角色,讲师\学员, 用户登陆后根据角色不同,能做的事情不同,分别如下 讲师视图 管理班级,可创建班级,根据学员qq号把学员加入班级 可创建指定班级的上课纪录,注意一节上课纪录对应多条学员的上课纪录, 即每节课都有整班学员上, 为了纪录每位学员的学习成绩,需在创建每节上课纪录是,同时 为这个班的每位学员创建一条上课纪录 为学员批改成绩, 一条一条的手动修改成绩 学员视图 提交作业 查看作业成绩 一个学员可以同时属于多个班级,就像报了Linux的同时也可以报名Pyth

C#base项目之学员管理系统(保存记事本)

这个项目分为四个文件夹:DllInvoke.cs (实现全屏效果),Stu.cs(实现注册和登录),Information.cs(实现学员信息的录入,显示.查询.添加.修改和删除),Program.cs(菜单操作和main方法)DllInvoke.cs:(友情提示,using System.Runtime.InteropServices; 需要引入该命名空间) public class DllInvoke { #region Win API [DllImport("kernel32.dll&qu

XMwoods通用版权限管理系统 .net 联系QQ:847129860

XMwoods通用版权限管理系统 主要功能有:权限管理.角色管理.部门管理.用户管理.公司管理.模块管理.系统设置.一. 权限管理以关键字(Key)的方式来定义系统的权限,使系统权限分配更加贴合企业需求.提供给开发人员使用,权限的控制需要与系统功能的实现挂接.● 权限管理界面,可以进行系统权限的定义操作.● 用户权限管理,对用户权限进行自定义设置,也可以继承其他用户.角色 等权限.● 角色权限管理,对角色权限进行自定义设置,也可以继承其他角色 等权限.二.角色管理系统实现了内部员工户角色的统一管