zoukankan      html  css  js  c++  java
  • 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版本中外键默认都是级联更新删除的
  • 相关阅读:
    javaWeb css图文混排
    Junit 测试 @Test 红名问题
    java面试题:已知一个数组[2,4,6,2,1,5],将该数组进行排序(降序,不能用工具类进行排序),创建两条线程交替输出排序后的数组,线程名自定义
    【转】正则表达式的分组
    正则表达式基础
    IIS连接数修改
    【整理】fiddler不能监听 localhost和 127.0.0.1的问题
    【转】WKT、SRID、EPSG概念
    WPF中查找控件的扩展类
    【转】告别码农,成为真正的程序员
  • 原文地址:https://www.cnblogs.com/mayrain/p/13054899.html
Copyright © 2011-2022 走看看