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实现表关系(一对多,一对一,多对多))的主要内容,如果未能解决你的问题,请参考以下文章

057:表关系之一对多

gorm 关系一对一,一对多,多对多查询

gorm 关系一对一,一对多,多对多查询

Hibernate框架进阶(中篇)之多表关系

利用hibernate实现数据库对象关联(多对一对多一对多对多)

多表关系一对多和多对多