PythonWeb开发Django框架学习(十)数据库一对多和多对多操作
来源:互联网 发布:淘宝宝贝数据包 编辑:程序博客网 时间:2024/06/06 20:49
上次讲了关于单个数据库的数据怎么进行增删改查的操作,这次呢说一下对于表间存在关系的数据库的数据进行处理。
1.先在models.py文件中定义相关类:
# -*- coding: utf-8 -*-from __future__ import unicode_literalsfrom django.db import modelsimport django.utils.timezone as timezoneimport 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,这就是本节所要说的一些数据库的基本操作。
阅读全文
0 0
- PythonWeb开发Django框架学习(十)数据库一对多和多对多操作
- PythonWeb开发Django框架学习(九)使用Model类操作数据库数据
- PythonWeb开发Django框架学习(十一)使用框架自带Admin管理数据库数据
- pythonWeb -- Django开发- 模型Model 和 数据库的操作
- PythonWeb开发Django框架学习(八)Model与数据库初步
- PythonWeb开发Django框架学习(五)Template标签
- PythonWeb开发Django框架学习(六)Tempalte过滤器
- PythonWeb开发Django框架学习(七)URL的配置
- PythonWeb开发Django框架学习(十二)基础总结
- 开始学习数据库操作 一对一,一对多,多对多
- django数据库操作-增删改查-多对多关系以及一对多(外键)关系
- django数据库操作-增删改查-多对多关系以及一对多(外键)关系
- django数据库操作-增删改查-多对多关系以及一对多(外键)关系
- django数据库操作-增删改查-多对多关系以及一对多(外键)关系
- PythonWeb 开发Django框架(一) 环境搭建
- PythonWeb开发Django框架(三)模板Templates初步
- django中数据库一对一,一对多,多对多关系
- django 一对多关系操作
- Bean named 'BService' is expected to be of type 'path1' but was actually of type 'path2'
- dell服务器centos系统磁盘大于16T时的操作
- 数字转汉字,含十百千
- Java注解(转载)
- spring mvc 发送邮件中部分异常处理
- PythonWeb开发Django框架学习(十)数据库一对多和多对多操作
- centos6.5 安装postgresql9.4
- Android系统传播大全和开机自启动的Service
- JMeter总结【1】连接各种数据库配置
- 关于数组不得不说的事(一维数组)
- How many ways(递推)
- 值域线段树
- Android EditText 获得焦点不显示光标
- Linux系统安装时分区的选择(推荐)