Django表关系的实现

1.首先创建以下5张表模型,表之间的以应关系如下:

2.模型类:

#学院表
class Department(models.Model):
    d_id = models.AutoField(primary_key=True)
    d_name = models.CharField(max_length=30)

    def __str__(self):
        return ‘Department<d_id=%s,d_name=%s>‘               %(self.d_id,self.d_name)

#学生表
class Student(models.Model):
    s_id = models.AutoField(primary_key=True)
    s_name = models.CharField(max_length=30)
    #与学院表建立一对多关系
    department = models.ForeignKey(‘Department‘)
    #与课程表创建多对多关系
    course = models.ManyToManyField(‘Course‘)

    def __str__(self):
        return ‘Student<s_id=%s,s_name=%s>‘               %(self.s_id,self.s_name)

#课程信息表
class Course(models.Model):
    c_id = models.AutoField(primary_key=True)
    c_name = models.CharField(max_length=30)

    def __str__(self):
        return ‘Course<c_id=%s,c_name=%s>‘               %(self.c_id,self.c_name)

#学生详情表
class Stu_detail(models.Model):
    s_id = models.OneToOneField(‘Student‘)
    age = models.IntegerField()
    gender = models.BooleanField(default=1)
    city = models.CharField(max_length=30,null=True)

    def __str__(self):
        return ‘Stu_detail<s_id=%s,age=%s,gender=%s,city=%s>‘               %(self.s_id,self.age,self.gender,self.city)

3.创建好后,使用manage.py管理工具把模型映射到数据库中,需要注意的是在Django ORM中多对多关系的中间表会自动创建.

4.查看数据库:

5.添加有查询数据:

def add_info(request):
    #一对多关系添加数据
    # d1 = Department()
    # d1.d_name = ‘软件‘
    # d1.save()
    # s1 = Student()
    # s1.s_name = ‘蓝靓钦‘
    # s1.department = d1
    # s1.save()
    #多对多关系添加数据
    c1 = Course()
    c1.c_name = ‘django‘
    c1.save() #这是往课程信息表中添加数据
    #查找学生信息表中name包含‘蓝靓钦‘的学生
    s1 = Student.objects.filter(s_name__contains=‘蓝靓钦‘)[0]
    s1.course.add(c1)
    return HttpResponse(‘插入数据‘)

def search_info(request):
    rs = Student.objects.filter(s_name__contains=‘蓝靓钦‘)[0]
    #一对多关系查询
    print(rs.department)
    #多对多关系查询,必有用all方法
    print(rs.course.all())
    #反向查找,通过课程查找学生
    cs = Course.objects.first()
    print(cs.student_set.all())
    return HttpResponse(‘查找‘)
mysql> select * from info_department;
+------+--------+
| d_id | d_name |
+------+--------+
|    1 | 软件   |
+------+--------+
1 row in set (0.00 sec)

mysql> select * from info_student;
+------+-----------+---------------+
| s_id | s_name    | department_id |
+------+-----------+---------------+
|    1 | 蓝靓钦    |             1 |
+------+-----------+---------------+
1 row in set (0.00 sec)

mysql> select * from info_course;
+------+--------+
| c_id | c_name |
+------+--------+
|    1 | python |
+------+--------+
1 row in set (0.00 sec)

mysql> select * from info_student_course;
+----+------------+-----------+
| id | student_id | course_id |
+----+------------+-----------+
|  1 |          1 |         1 |
+----+------------+-----------+
1 row in set (0.00 sec)

mysql> select * from info_student_course;
+----+------------+-----------+
| id | student_id | course_id |
+----+------------+-----------+
|  1 |          1 |         1 |
|  2 |          1 |         2 |
+----+------------+------

原文地址:https://www.cnblogs.com/remoting-py/p/9114464.html

时间: 2024-10-30 07:47:31

Django表关系的实现的相关文章

python_day18 Django表关系

以下内容基于上次项目基础上完成的. urls:views:index.html:在上次页面基础上{{ book_list.publisher.name }}    出版社名称即出现 一对多的添加:urls:views:def index(request):    if request.method == "POST":        title=request.POST.get("title")        .....        publish_id=requ

Django orm关系表的创建 、路由层以及视图层

一.Django 表关系的创建 1.表的对应关系 一对多 多对多 一对一 2.如何判断表的对应关系 利用换位思考的方式,分别站在两张表的角度上去思考 这里比如我们以图书管理系统为例来创建几个简单的表 图书表 出版社表 作者表 为了方便演示,这里我们就强行规定了表之间的关系: 图书和出版社是一对多的外键关系,一对多外键关系 将外键字段建在多的哪一张表上 图书与作者之间是多对多的外键关系,多对多的外键关系 外键字段无论建在那张表都可以,但是推荐你建在查询频率高的那张    表上 作者与作者与作者详情

Django博客项目之表关系设计

一.需要创建的表以及表之间的关系 1.User(用户信息表) User表和Blog表是一对一关系,即一个用户对应一个个人站点 2.Blog(个人站点表) 3.Category(文章分类表) Blog和Category表是一对多关系,即一个站点可以有多个分类,但是一个分类只属于一个站点 4.Tag(文章标签表) Blog和Tag表是一对多关系,即一个站点可以有多个标签,但是一个标签只属于一个站点 5.Article(文章表) User和Article表是一对多关系,即一个用户可以有多篇文章,但是一

Django 第十课 3.【ORM表关系】

#表关系 ## 一对多: 1:应用场景:比如文章和作者之间的关系.一个文章只能由一个作者编写,但是一个作者可以写多篇文章.文章和作者之间的关系就是典型的多对一的关系. 2:实现方式:一对多或者多对一,都是通过 'ForeignKey' 来实现的.还是以文章和作者的案例进行讲解. class User(models.Model): username = models.CharField(max_length=20) password = models.CharField(max_length=10

Django 批量插入数据、自定义分页器、多表关系的建立及Form组件(待更新。。。)

目  录 django批量出入数据 自定义分页器 创建多对多表关系的建立 form组件 form组件钩子函数 一.django批量出入数据 视图函数: from app01 import models # 向表中插入1000条数据 def index(request): # 方式1: # for i in range(1000): # models.Book.objects.create(title='第%s本书'%i) # book_Queryset = models.Book.objects

django之表关系的实现

1.三种表关系在Model类中的对应关系 2.以学生表.学生具体信息表.学院表.课程表为例实现上述三种表关系 分析:一个学院有多个学生,因此学院与学生的关系为一对多的关系    一个学生上多门课,一门课程有多个学生上,因此学生与课程的关系为多对多的关系    一个学生有一个具体信息表,一个具体信息表对应一个学生,因此学生与学生具体信息表为一对一的关系 3.代码实现 from django.db import models # Create your models here. class Depa

django-创建表的字段属性,表关系

表的各种属性文档:null char ..., django与之对应的文档 https://docs.djangoproject.com/en/1.11/ref/models/fields/   英文 https://yiyibooks.cn/xx/Django_1.11.6/ref/models/fields.html     中文 表关系 class Book(models.Model): headline = models.CharField('大标题', max_length=50) p

数据库 表关系设计参考

表关系设计 出版社表关系 # 出版社表 class Publisher(models.Model): name = models.CharField(max_length=32) addr = models.CharField(max_length=128) phone = models.IntegerField() def __str__(self): return self.name # 作者表 class Author(models.Model): name = models.CharFi

059:表关系之多对多

表关系之多对多场景: 1.应用场景:比如文章和标签的关系.一篇文章可以有多个标签,一个标签可以被多个文章所引用.因此标签和文章的关系是典型的多对多的关.2.实现方式:Django 为这种多对多的实现提供了专门的 Field .叫做 ManyToManyField .还是拿文章和标签为例进行讲解. 示例代码如下: # models.py文件内容: class Tag(models.Model): tname = models.CharField(max_length=100) class Arti