怎么在django中创建多对多表

  介绍

怎么在django中创建多对多表?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

创建一张作者表,作者,创建外键与书表,多对多关系,外键字段放在那张表都可以,

class 作者(models.Model):      时间=name 才能;models.CharField (max_length=32)      #才能在作者表中创建第三张表,与书表创建多对多关系一样的效果      #,才能books =, models.ManyToManyField(书)      #才能再重新生成数据库,因为新增了多对多关系,书表会新增字段,所以直接重新生成数据库就会报错,

表在书里,关联表作者,作者就要放书在表上面,

关联的表作者加上引号是字符串,是一个查询过程,等加载完,找作者,

就可以在全局找到,

不加引号,就要把作者表放书在表上面

在书表中,创建与作者表多对多的关系

class 书(models.Model):      时间=title 才能;models.CharField (max_length=32)   时间=price 才能;models.DecimalField (max_digits=5,,, decimal_places=2)      #书才能籍与出版社是一对多,书是多,出版社是一,外键(子表)建在多的表中,   # publish 才能作为一个外键,与Book 表建立一对多关系,默认绑定到Book 的主键标识上   publish 才能=,models.ForeignKey(出版)

然后生成数据库,注意:如果书表中有数据,直接生成数据,就会报错,因为书表会新增一个author_id字段,而原来的书表中的数据没有改字段,所以会报错,删除书表中的数据

执行命令python管理。py makemigrations, python管理。py迁移,

在数据库会发现新增一张表,book_author,是第三张表,一个主键,2个外键,是django自动创建的,现在就可以添加书籍

怎么在django中创建多对多表

在创建的表里,手动插入数据,,然后绑定书与作者的多对多关系,

怎么在django中创建多对多表

在观点视图函数中,,先获取书表的一个书对象,查看该书关联的作者,就是book_obj.authors.all ()

id=1的这本书,如果没有关联的作者,返回没有,如果有作者,就返回一个对象集合,QuerySet数据类型,里面包含了关联的作者对象

#给第三张表添加关系,   #才能看下作者对象      时间=book_obj 才能;Book.objects.get (id=1) #获取一个书籍的对象,有可能是多个作者写的,是一个集合对象,      #才能获取id=1,这本书的作者集合对象,类似列表结构   打印(book_obj.authors),才能# gu_orm.Author.None ,是id=1的这本书,没有作者,所以得到一个没有,- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   #才能如果给书和作者绑定了关系,添加值,就会得到一个Queryset集合,   打印才能(book_obj.authors.all ())   ,,# & lt; QuerySet [& lt;大敌;作者:,egon 祝辞,,& lt;,作者:,alex 祝辞,,& lt;,作者:,yuan 祝辞],在- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - -

<强>方法1:多对多关系的创建,获取一个个对象,添加

现在用代码实现多对多关系的创建

先删除原第三张表的数据,

步骤1,先得到一个书对象

book_obj =, Book.objects.get (id=1) #获取一个书籍的对象,有可能是多个作者写的,是一个集合对象,

步骤2:获取1个或2个以上作者对象

, author1 =, Author.objects.get (id=1)=,,author2  Author.objects.get (id=2)

步骤3:把author1,和author2添加到book_obj对象中,使用添加方法,书对象关联的作者表,添加2个作者对象

#书表与表作者绑定关系,把2个作者对象添加到,关联到书对象   book_obj.authors.add才能(author1 author2)

然后再执行url,刷新数据库

怎么在django中创建多对多表

===

<强>方法2:多对多关系的创建,获取所有的对象集合,添加,记得用*号,把列表拆开,一个个的获取对象

#先获取一个书对象,   时间=book_obj  Book.objects.get (id=1)      2,#方法,把所有的作者加到书对象中   时间=author_list 才能;Author.objects.all ()   book_obj.authors.add才能(* author_list)

怎么在django中创建多对多表