26.Django实现表关系(一对多,一对一,多对多))
Posted 孤寒者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了26.Django实现表关系(一对多,一对一,多对多))相关的知识,希望对你有一定的参考价值。
表关系的实现:
实践实现:
(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!!!
❤️可以扫码关注本人公众号——任何问题都可在公众号提问(定时有专人解答);并且不定时更新干货文。欢迎关注哦!❤️
以上是关于26.Django实现表关系(一对多,一对一,多对多))的主要内容,如果未能解决你的问题,请参考以下文章