zoukankan      html  css  js  c++  java
  • django基础之day09,多对多创建数据表的三种方式

    
    
    多对多三种创建方式
    1.全自动(用在表关系不复杂的一般情况)
        class Book(models.Model):
            title=models.CharField(max_length=32)
            多对多关系字段
            authors=models.ManyToManyField(to='Authors')
    
        class Authors(models.Model):
            name=models.CharField(max_length=32)
    
        全自动创建第三张关系表的好处:
            至始至终都没有操作第三张表,全部都是由orm自动帮你创建的
            还内置了四个操作第三张表的方法
                add remove  set  clear
    
        不足之处:
            自动创建的第三张表无法扩展需要的字段,不支持修改,表的扩展性很差
            (封装程度越高,可扩展性越低)
    
    
    2.纯手撸三张表(了解)
        class Book(models.Model):
            title=models.CharField(max_length=32)
    
        class Authors(models.Model):
            name=models.CharField(max_length=32)
    
        class Book2Authors(models.Model):
            book=models.ForeignKey(to='Book')
            author=models.ForeignKey(to='Authors')
            create_time=models.DateField(auto_now_add=True)
    
        好处:
            第三张表中字段个数和字段名称全都可以自己来定义
    
        不足之处:
            不再支持orm跨表查询,没有正反向查询的概念
            不支持add  remove  set  clear
    
    
    3.半自动(推荐使用)
    
    
        class Authors(models.Model):
            name=models.CharField(max_length=32)
    
        class Book2Authors(models.Model):
            book=models.ForeignKey(to='Book')
            authors=models.ForeignKey(to='Authors')
    
        class Book(models.Model):
            title=models.CharField(max_length=32)
            #多对多关系字段
                authors=models.ManyToManyField(to='Authors',through='Book2Authors',through_fields=("book","authors"))
    
    
    
    
            '''
            1.当你的ManyToManyField只有一个参数的情况下,orm会自动帮你创建第三张关系表
            2.如果你加了through='第三张关系表表名',
              和through_fields=("关系表表字段1","关系表表字段2"),
              ,那么orm就不会自动帮你创建第三张表,但是它会在内部帮你维护表关系,让你能够继续使用orm的跨表查询
    
            3.through_fields=("第三张关系表表字段1","第三张关系表表字段2")中字段放置上是有顺序的,
            注意事项:
                Book表中多对多关系字段,:
                authors=models.ManyToManyField(to='Authors',through='Book2Authors',through_fields=("book","authors"))
                through_fields【!!放在哪张表中,该表的表名就放在前面!!】
    
            4.
              through='第三张关系表表名',
              through_fields=("第三张关系表表字段1","第三张关系表表字段2"),
    
    
            '''
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
  • 相关阅读:
    麻省理工算法导论学习笔记(1)算法介绍
    麻省理工算法导论学习笔记(2)渐近符号、递归及解法
    Mybatis if 标签 判断不生效
    Linux permission denied解决方法?
    MySQL查找是否存在
    List集合数据去重
    Java获取list集合的前几个元素
    git如何新建(修改)分支
    asp.net下url参数含有中文读取后为乱码
    时间复杂度为O(n)的排序算法
  • 原文地址:https://www.cnblogs.com/ludundun/p/11978754.html
Copyright © 2011-2022 走看看