创建多对多表关系的三种方式


创建多对多表关系的三种方式

在我们之前创建多对多表的时候,一直用的都是全自动的方式来创建第三张表的。

全自动

1.全自动(推荐使用**) 好处在于 django orm会自动帮你创建第三张关系表 但是它只会帮你创建两个表的关系字段 不会再额外添加字段 虽然方便 但是第三张表的扩展性较差 无法随意的添加额外的字段 class Book(models.Model): ... authors = models.ManyToManyField(to='Author') class Author(models.Models): ...

好处坏处都很明显,好处就是方便,坏处就是老板叫你加个字段你就炸了。

纯手动

2.纯手动(不推荐) 好处在于第三张表可以任意的添加额外的字段 不足之处在于orm查询的时候 很多方法都不支持 查询的时候非常麻烦 class Book(models.Model): ... class Author(models.Models): ... class Book2Author(models.Model): book_id = models.ForeignKey(to='Book') author_id = models.ForeignKey(to='Author') create_time = models.DateField(auto_now_add=True) ...

这个就不用说了,连django存在的意义都没了,好多方法都不能用。

半自动

3.半自动(推荐使用******) 手动建表 但是你会告诉orm 第三张表是你自己建的 orm只需要给我提供方便的查询方法 第三种虽然可以使用orm查询方法 但是不支持使用 add() set() remove() clear() class Book(models.Model): ... authors = models.ManyToManyField(to='Author', through='Book2Author', through_fields=('book','author')) class Author(models.Model): ... books = models.ManyToManyField(to='Book', through='Book2Author', through_fields=('author', 'book')) class Book2Author(models.Model): book = models.ForeignKey(to='Book') author = models.ForeignKey(to='Author') create_time = models.DateField(auto_now_add=True) ... # 1.半自动 一定要加两个额外的参数 through='Book2Author', through_fields=('book','author') # 2.后面字段的顺序 由第三张表通过哪个字段查询单表 就把哪个字段放前面

半自动也是最推荐使用的,虽然他不支持了那四个方法,但好在那四个方法不难写,和纯手动的比起来完全不算什么,但是要注意的是,第三张表是自己创建的,两个表都要建立一个

ManyToManyField的字段,而且里面都要加上两个参数,一个是through,意思是通过哪张表,也就是第三张表,第二个参数就是 through_fields,要写一个元组,告诉第三张表,通过这个元组里的两个字段知道是那两张表多对多,第三张表通过哪个字段查询单表 就把哪个字段放前面。

总而言之:这个告诉我们的就是,在射击项目的时候,一定要给自己留后路,防止后续的迭代更新!!!!!



上一篇:DJango中事务的使用

下一篇:DJango重写用户模型


Copyright © 2002-2019 k262电脑网 www.k262.cn 皖ICP备2020016292号
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!QQ:251442993 热门搜索 网站地图