zoukankan      html  css  js  c++  java
  • Django 表关系的创建 以及数据的增删改查

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


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

    Book与Publish表

    找关系:一对多

    复制代码
    左表(Book)<------------------------------->右表(Publish)
    
    # 步骤一:
    #分析1、先站在左表的角度
    左表的多条记录代表多本书籍,右表的一条记录代表一个出版社,多本书籍对应同一个出版社 ✔️
    
    #分析2、再站在右表的角度去找
    右表的多条记录代表多个出版社,左表的一条记录代表一本书,多个出版社不能出版同一本书 ✘
    
    # 步骤二:后确定关系
    # 一对多
    左表多对一右表,关联字段应该创建在BOOk表中,然后foreign key 右表
    复制代码

    Book与Author表

    关系:多对多

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

    Author表与AuthorDetail表

    关系:一对一

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

    复制代码
    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请求生命周期流程图

     
  • 相关阅读:
    iOS开发中应用程序图标和启动图片的尺寸
    Localization native development region 设置属性(转)
    iOS 开发之 ZBarSDK 二维码扫描自定义二维码扫描页面(二)
    iOS 开发之 ZBarSDK 二维码扫描 静态库不支持64bit完美解决(一)
    iOS 播放Gif动画
    使用GCD异步下载图片 可以中途停止下载
    GCD线程队列 MJ(转)
    iOS 开发之头部滚动展示视图
    iOS 版本更新 (转)
    iOS App打包发布 (转)
  • 原文地址:https://www.cnblogs.com/wddxx/p/13796846.html
Copyright © 2011-2022 走看看