创建多对多表关系的三种方式
创建多对多表关系的三种方式
第一种(django自动创建)
优点是django自动创建的,并且可以使用django中的方法
缺点是不可以在关系表中添加其他的字段
1. models.py
class Author(models.Model):
...
books = models.ManyToManyField(to="Book")
class Book(models.Model):
...
第二种(手动创建一张关系表)
优点在于可以任意增加新字段
缺点是在orm查询时,很多方法不支持,查询会很麻烦
class Author(models.Model):
...
class Book(models.Model):
...
class AuthorToBook(models.Model):
author = models.ForeignKey(to='Author')
book = models.Foreignkey(to='Book')
... # 还可以添加很多字段
ForeignKey
会自动添加 _id ,那么 author
就会变成author_id
第三种(结合版) - 在设计项目的时候要给自己留一条后路
有个缺点就是不可以使用对关系表进行操作的功能了,add
,set
,remove
,clear
class Author(models.Model):
...
books = models.ManyToMany(to='Book', through='AuthorToBook', though_field=('author', 'book'))
class Book(models.Model):
...
class AuthorToBook(models.Model):
author = models.ForeignKey(to='Author')
book = models.ForeignKey(to='Book')
... # 还可以添加很多字段
through=: 指定那张表为关系表
though_field=: 指定关系表中的字段名,顺序是在那个表中使用ManyToMany
多对多建立关系,那么第一个位置就是当前表在关系表中对应的字段, 也就是说在那个表里面,那个表在关系表中对应的字段就排前面.