表关系的实现:
实践实现:
(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!!!