26.Django实现表关系(一对多,一对一,多对多))

1,122 阅读1分钟

表关系的实现:

在这里插入图片描述

实践实现:

在这里插入图片描述

(1)模型的定义:

(models.py文件)

from django.db import models

# Create your models here.

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)
    # 外键实现一对多。  on_delete级联删除。   参数CASCADE的意思是如果对应的学院被删除了,那么对应的学院下面的学生数据也跟着删除!
    department = models.ForeignKey("Department",on_delete=models.CASCADE)       #通过外键实现学生表和学院表之间的多对一关系!
    # Django的ORM模型使得我们实现多对多不需要再建一个中间表,而之间使用.ManyToMany()方法建字段名即可自动生成!
    course = models.ManyToManyField("Course")                                   #通过.ManyToMany()方法实现课程表和学生表之间的多对多关系

    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):
    """
    学生详情表
    """
    #Student代表外键的意思; OneToOneField()代表唯一。外键加唯一实现一对一的关系。   
    Student = models.OneToOneField("Student",on_delete=models.CASCADE)       #通过外键加唯一实现学生表和学生详情表之间的一对一关系!
    age = models.IntegerField()
    phone = models.CharField(max_length=11)

    def __str__(self):
        return "Stu_detail<age=%s,phone=%s>" % (self.age, self.phone)

(2)切记:因为我们添加了一个新模型,因此需要再次迁移数据库。

过程: 修改models.py,执行命令makemigrations music,再执行命令migrate music。 (不要嫌弃我一遍又一遍的说哦)

(3)数据库中查看咱的表:

在数据库我们能看到5张表,其中多对多关系的ManyToManyField方法自动生成了Student和Course表的中间表music_student_course!!!

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述 在这里插入图片描述