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"),
    
    
            '''
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
  • 相关阅读:
    hud 3336 count the string (KMP)
    JSOI2008星球大战(并查集)
    HAOI2006受欢迎的牛
    十二月个人考核
    十二月个人考核
    CentOS配置Tomcat监听80端口,虚拟主机
    CentOS配置Tomcat监听80端口,虚拟主机
    如何调试一个无法重现的错误?
    如何调试一个无法重现的错误?
    Highcharts的自适应DOM或者DIV,JS方法实现
  • 原文地址:https://www.cnblogs.com/ludundun/p/11978754.html
Copyright © 2011-2022 走看看