您的位置:首页 > 编程语言 > Python开发

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

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

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,这就是本节所要说的一些数据库的基本操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  django