• 手动创建第三张表


     1  多对多的关系,三种写法
     2         -手动创建第三张表(不创建关联关系)
     3             class Book(models.Model):
     4                 # 默认会创建id
     5                 name = models.CharField(max_length=32)
     6             class Author(models.Model):
     7                 name = models.CharField(max_length=32)
     8             class Book2Author(models.Model):
     9                 id = models.AutoField(primary_key=True)
    10                 book=models.ForeignKey(to='Book',to_field='id')
    11                 author=models.ForeignKey(to='Author',to_field='id')
    12             -不管是插入和查询,删除,都很麻烦(一般不用)
    13         -自动创建第三张表
    14             -查询,插入,删除,都很方便
    15             -缺点:字段是固定的,第三张表如果要添加字段,实现不了
    16         -手动创建第三张表,建立关联关系
    17             class Book(models.Model):
    18                 # 默认会创建id
    19                 name = models.CharField(max_length=32)
    20                 # 中介模型,手动指定第三张中间表是Book2Author
    21                 authors=models.ManyToManyField(to='Author',through='Book2Author',through_fields=('book','author'))
    22             class Author(models.Model):
    23                 name = models.CharField(max_length=32)
    24                 def __str__(self):
    25                     return self.name
    26             class Book2Author(models.Model):
    27                 id = models.AutoField(primary_key=True)
    28                 book=models.ForeignKey(to='Book',to_field='id')
    29                 author=models.ForeignKey(to='Author',to_field='id')
    30                 
    31             -through:来指定我的第三张表是哪个
    32             -through_fields:('book','author'),第一个值是:从中间表找到设置关联字段的表,通过哪个字段,第一个位置就写它
    33             -终极总结:防止混了:关联字段就是表名小写,第一个值:就是当前表的表名小写
    34             -查询,新增,删除,都很方便
    35             -第三张表,可以添加别的字段
  • 相关阅读:
    Centos7 Apache 2.4.18编译安装
    Centos7 mysql-community-5.7.11编译安装
    Centos7 安装MPlayer过程详解
    Vmware虚拟机克隆的网卡问题
    虚拟机VMware新增硬盘无法识别问题
    python推导式
    Python迭代器和生成器
    Python装饰器
    Python函数初识二
    Python函数初识
  • 原文地址:https://www.cnblogs.com/xuqidong/p/12109601.html
Copyright © 2020-2023  润新知