Django 表关系的建立

Django 表关系的建立

咱们知道,表关系分为一对多,多对多,一对一

咱们以一个图书管理系统为背景,设计了下述四张表,让咱们来找一找它们之间的关系git

Book与Publish表django

找关系:一对多app

左表(Book)<------------------------------->右表(Publish)

# 步骤一:
#分析一、先站在左表的角度
左表的多条记录表明多本书籍,右表的一条记录表明一个出版社,多本书籍对应同一个出版社 ✔️

#分析二、再站在右表的角度去找
右表的多条记录表明多个出版社,左表的一条记录表明一本书,多个出版社不能出版同一本书 ✘

# 步骤二:后肯定关系
# 一对多
左表多对一右表,关联字段应该建立在BOOk表中,而后foreign key 右表

Book与Author表spa

关系:多对多设计

二者之间是多对多的外键关系,须要建立一张单独的新表来专门存放两者的关系,外键字段推荐建在查询频率较高的那种表中3d

Author表与AuthorDetail表code

关系:一对一orm

做者与做者详情是一对一的外键关系,外键字段推荐建在查询频率较高的那种表中blog

class Book(models.Model):
    # 由于id是自动建立,因此能够不写
    title =models.CharField(max_length=64)
    #price为小数字段,总共8位数,小数位占2位
    price = models.DecimalField(max_digits=8,decimal_places=2)

    # 书籍与出版社  是一对多外键关系
    publish = models.ForeignKey(to='Publish')  # 默认关联字段就是出版社表的主键字段
    # publish = models.ForeignKey(to=Publish)
    # to后面也能够直接写表的变量名 可是须要保证该变量名在当前位置的上方出现

    # 书籍与做者  是多对多外键关系
    authors = models.ManyToManyField(to='Author')
    """
    authors字段是一个虚拟字段 不会真正的在表中建立出来
    只是用来告诉django orm 须要建立书籍和做者的第三张关系表
    """

class Publish(models.Model):
    name = models.CharField(max_length=64)
    addr = models.CharField(max_length=64)

class Author(models.Model):
    name =models.CharField(max_length=32)
    phone = models.BigIntegerField()
    # 一对一外键关系创建
    author_detail = models.OneToOneField(to='AuthorDetail')

class AuthorDetail(models.Model):
    age = models.IntegerField()
    addr = models.CharField(max_length=255)

注意:"""
    ForeignKey字段以及OneToOneField字段 在建立表的时候orm都会自动给该字段加_id的后缀
    不管本身有没有加
   """生命周期

 

多对多关联关系的三种方式

方式一:全自动建立第三张表

 方式二:纯手动建立(了解)

 

  方式三:半自动建立(推荐)

django请求生命周期流程图

相关文章
相关标签/搜索