• django orm 创建表关系


    """
    表与表之间的关系
        一对多
        
        多对多
        
        一对一
        
        没有关系
    
    判断表关系的方法:换位思考
    """
    图书表
    
    出版社表
    
    作者表
    
    作者详情表
    
    
    """
    图书和出版社是一对多的关系 外键字段建在多的那一方 book
        
    图书和作者是多对多的关系 需要创建第三张表来专门存储
    
    作者与作者详情表是一对一
    """
    from django.db import models
    
    # Create your models here.
    
    
    # 创建表关系  先将基表创建出来 然后再添加外键字段
    class Book(models.Model):
        title = models.CharField(max_length=32)
        price = models.DecimalField(max_digits=8,decimal_places=2)
        # 总共八位 小数点后面占两位
        """
        图书和出版社是一对多 并且书是多的一方 所以外键字段放在书表里面
        """
        publish = models.ForeignKey(to='Publish')  # 默认就是与出版社表的主键字段做外键关联
        """
        如果字段对应的是ForeignKey 那么会orm会自动在字段的后面加_id
        如果你自作聪明的加了_id那么orm还是会在后面继续加_id
        
        后面在定义ForeignKey的时候就不要自己加_id
        """
    
    
        """
        图书和作者是多对多的关系 外键字段建在任意一方均可 但是推荐你建在查询频率较高的一方
        """
        authors = models.ManyToManyField(to='Author')
        """
        authors是一个虚拟字段 主要是用来告诉orm 书籍表和作者表是多对多关系
        让orm自动帮你创建第三张关系表
        """
    
    
    class Publish(models.Model):
        name = models.CharField(max_length=32)
        addr = models.CharField(max_length=32)
    
    
    class Author(models.Model):
        name = models.CharField(max_length=32)
        age = models.IntegerField()
        """
        作者与作者详情是一对一的关系 外键字段建在任意一方都可以 但是推荐你建在查询频率较高的表中
        """
        author_detail = models.OneToOneField(to='AuthorDetail')
        """
        OneToOneField也会自动给字段加_id后缀
        所以你也不要自作聪明的自己加_id
        """
    
    class AuthorDetail(models.Model):
        phone = models.BigIntegerField()  # 或者直接字符类型
        addr = models.CharField(max_length=32)
    
    
    """
        orm中如何定义三种关系
            publish = models.ForeignKey(to='Publish')  # 默认就是与出版社表的主键字段做外键关联
            
            authors = models.ManyToManyField(to='Author')
            
            author_detail = models.OneToOneField(to='AuthorDetail')
            
            
            ForeignKey
            OneToOneField
                会自动在字段后面加_id后缀
    """
    
    # 在django1.X版本中外键默认都是级联更新删除的
  • 相关阅读:
    SASS常用方法
    Vue 全局过滤和局部过滤
    Java进阶知识点8:高可扩展架构的利器
    InnoDB MVCC RR隔离级别下的数据可见性总结
    记一次诡异的网络故障排除
    数据库的读锁和写锁在业务上的应用场景总结
    Gradle配置IDEA正常识别JPA Metamodel Generator动态生成的代码
    程序员容易读错的单词
    Java进阶知识点7:不要只会写synchronized
    Java进阶知识点6:并发容器背后的设计理念
  • 原文地址:https://www.cnblogs.com/mayrain/p/13054899.html
Copyright © 2020-2023  润新知