美文网首页
多对多关联关系的三种方式

多对多关联关系的三种方式

作者: aq_wzj | 来源:发表于2018-11-19 14:48 被阅读0次

1. 自行创建第三张表

class Book(models.Model):
    title = models.CharField(max_length=32, verbose_name="书名")


class Author(models.Model):
    name = models.CharField(max_length=32, verbose_name="作者姓名")


# 自己创建第三张表,分别通过外键关联书和作者
class Author2Book(models.Model):
    author = models.ForeignKey(to="Author")
    book = models.ForeignKey(to="Book")

    class Meta:
        unique_together = ("author", "book")

2. 通过ManyToManyField自动创建第三张表

class Book(models.Model):
    title = models.CharField(max_length=32, verbose_name="书名")


# 通过ORM自带的ManyToManyField自动创建第三张表
class Author(models.Model):
    name = models.CharField(max_length=32, verbose_name="作者姓名")
    books = models.ManyToManyField(to="Book", related_name="authors")

3. 设置ManyTomanyField并指定自行创建的第三张表

class Book(models.Model):
    # 默认会创建id
    name = models.CharField(max_length=32)
    # 中介模型,手动指定第三张中间表是Book2Author
    authors=models.ManyToManyField(to='Author',through='Book2Author',through_fields=('book','author'))
    
class Author(models.Model):
    name = models.CharField(max_length=32)
        
class Book2Author(models.Model):
    id = models.AutoField(primary_key=True)
    book=models.ForeignKey(to='Book',to_field='id')
    author=models.ForeignKey(to='Author',to_field='id')
                
through:来指定我的第三张表是哪个
through_fields:('book','author'),第一个值是:从中间表找到设置关联字段的表,通过哪个字段,第一个位置就写它
        
终极总结:防止混了:关联字段就是表名小写,第一个值:就是当前表的表名小写

第三张表,可以添加别的字段

相关文章

  • MyBatis(五)-关联映射

    关联关系概述 在关系型数据库中,多表之间存在着三种关联关系,分别为一对一、一对多和多对多,如图所示。 这三种关联关...

  • 第九章 Mybatis的关联规则

    关联关系概述 在关系型数据库中,多表之间存在着三种关联关系,分别是:一对一、一对多、多对多关联关系图1 在Java...

  • 多对多关联关系的三种方式

    1. 自行创建第三张表 2. 通过ManyToManyField自动创建第三张表 3. 设置ManyTomanyF...

  • python-Flask_SQLAlchemy(4)

    数据表多对多关系 [TOC] 多对多关系 多对多关系,需要通过一个中间表进行关联 中间表使用db.Table的方式...

  • Hibernate 映射关系

    0. 关联关系映射 关联关系映射,是映射关系中比较复杂的一种映射关系,总的说来有一对一、一对多和多对多几种关系。细...

  • hibernate笔记-关联关系

    hibernate 关联关系主要有一对一,一对多,多对多 一对一关联 一对一关联包括: 主键关联 唯一外键关联 主...

  • 数据表对应关系(一对一、一对多、多对多)

    1.数据库中的多对多关联关系一般需采用中间表的方式处理,将多对多转化为两个一对多。 2.通过表的关系,来帮助我们怎...

  • Hibernate映射(一对多)

    Hibernate映射关系其实有很多种,包含一对一,一对多,多对一,多对多。其中,还有包含单向关联,多想关联。但是...

  • MySQL - 高级知识1: 实体关系, 关联查询, 自关联,

    关联查询 存储关系: 1对1, 1对多, 多对多 建立关系表外键:create table scores(id i...

  • 关联查询、子查询与分页查询

    关联查询 关联关系分为一对一,一对多,多对多关系关联查询就是从多张表中查询数据,当我们使用n张表使用关联查询,至少...

网友评论

      本文标题:多对多关联关系的三种方式

      本文链接:https://www.haomeiwen.com/subject/ybxafqtx.html