怎么在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自动创建的,现在就可以添加书籍
在创建的表里,手动插入数据,,然后绑定书与作者的多对多关系,
在观点视图函数中,,先获取书表的一个书对象,查看该书关联的作者,就是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,刷新数据库
===
<强>方法2:多对多关系的创建,获取所有的对象集合,添加,记得用*号,把列表拆开,一个个的获取对象强>
#先获取一个书对象, 时间=book_obj Book.objects.get (id=1) 2,#方法,把所有的作者加到书对象中 时间=author_list 才能;Author.objects.all () book_obj.authors.add才能(* author_list)怎么在django中创建多对多表