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
原创粉丝点击