PythonWeb开发Django框架学习(十)数据库一对多和多对多操作

xiaoxiao2021-02-28  68

上次讲了关于单个数据库的数据怎么进行增删改查的操作,这次呢说一下对于表间存在关系的数据库的数据进行处理。

1.先在models.py文件中定义相关类:

# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import models import django.utils.timezone as timezone import datetime # Create your models here. #教师类 class Teacher(models.Model): id = models.IntegerField(primary_key=True) name = models.CharField(max_length=50) class Meta: db_table = 'teacher' # 学生类 class Student(models.Model): id = models.IntegerField(primary_key=True) # AutoField name = models.CharField(max_length=50) age = models.IntegerField() intime = models.DateField() sex = models.IntegerField() teacher = models.ForeignKey(Teacher) # 外键关联 class Meta: db_table = 'student' #兴趣小组 class Group(models.Model): id = models.IntegerField(primary_key=True) name = models.CharField(max_length=50) #对应的学生,通过另一个MemberShip表来对应 members = models.ManyToManyField(Student,through="MemberShip") class Meta: db_table = 'group' #兴趣小组和对应的学生表的实体类 class MemberShip(models.Model): id = models.IntegerField(primary_key=True) group = models.ForeignKey(Group) student = models.ForeignKey(Student) class Meta: db_table='membership' 2.在views.py文件中进行一对多(一个老师带多个学生)的操作:

#一对多操作 def studentList(request): t = loader.get_template('studentList.html') # 引入模板 #student_list = Student.objects.all() teacher = Teacher.objects.get(id = 1) student_list = teacher.student_set.all() ''' 删除数据: student = Student.objects.get(id = 2) student.delete() 仅仅删除学生数据 删除该学生的老师,及与这个老师相关学生 student.teacher.delete() ''' ''' 新增数据: teacher.student_set.create(name='zoe',age=12,intime="2016-09-12",sex=0)给该老师添加一名学生 ''' c = {'studentList':student_list} # 传递的值 html = t.render(c) # 加载模板 return HttpResponse(html) 我注释掉的部分经过验证啦,自己下来验证吧

3.配置urls.py文件:

url(r'^studentList/$', views.studentList ),

4.在templates文件夹下新建studentList.html文件,编辑:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Student列表</title> </head> <body> {% for student in studentList %} <li>ID:{{ student.id }},姓名:{{ student.name }},年龄:{{ student.age }},入学时间:{{ student.intime |date:"Y-m-d"}},性别:{{ student.sex }},老师:{{ student.teacher.name }}</li> {% endfor %} </body> </html> 5.试验一下:

6.Model类还是上述,在views.py文件中编写多对多关系(一个兴趣小组有多个学生,同时一个学生可以参加多个兴趣小组)操作:

#多对多操作 def studentM2M(request): t = loader.get_template('studentM2M.html') # 引入模板 #得到group,再通过group获取学生 group = Group.objects.get(id=1) student_list = group.members.all() #获取学生加入的小组 student = Student.objects.get(id=6) group_list = student.group_set.all() #学生新加小组 gro = Group.objects.get(id=1) stu = Student.objects.get(id=7) MemberShip(group = gro , student=stu).save() c = {'studentList':student_list,'groupList':group_list} # 传递的值 html = t.render(c) # 加载模板 return HttpResponse(html)7.配置urls.py文件:

url(r'^studentM2M/$', views.studentM2M ),8.创建studentM2M.html文件并编辑:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Student列表</title> </head> <body> {% for student in studentList %} <li>ID:{{ student.id }},姓名:{{ student.name }},年龄:{{ student.age }},入学时间:{{ student.intime |date:"Y-m-d"}},性别:{{ student.sex }},老师:{{ student.teacher.name }}</li> {% endfor %} <hr> {% for group in groupList %} <li>ID:{{ group.id }},组名:{{ group.name }}</li> {% endfor %} </body> </html>9.试验一下:

ok,这就是本节所要说的一些数据库的基本操作。

转载请注明原文地址: https://www.6miu.com/read-77651.html

最新回复(0)