第一种:通过ManyToManyField自动创建
class Book(models.Model):
name = models.CharField(max_length=32)
# 第一种自动创建
authors = models.ManyToManyField(to='Author')
class Author(models.Model):
name = models.CharField(max_length=32)
- 优点:自动创建多对多关系表
- 缺点:不能在多对多关系表上添加字段
第二种:手动创建
class Book(models.Model):
name = models.CharField(max_length=32)
class Author(models.Model):
name = models.CharField(max_length=32)
# 手动创建第三张表
class BookAuthor(models.Model):
book = models.ForeignKey(to='Book')
author = models.ForeignKey(to='Author')
state = models.CharField()
- 优点:克服了第一种方法的缺点,可以自行添加字段
- 缺点:不能使用ORM方式查询
第三种:使用through=…模型
最简单和最优雅的方法是使用through=…模型,这最终将需要最少的工作来保持数据同步。
class Book(models.Model):
name = models.CharField(max_length=32)
author = models.ManyToManyField(to='Author',through='BookAuthor',through_fields=('book','author'))
class Author(models.Model):
name = models.CharField(max_length=32)
class BookAuthor(models.Model):
book = models.ForeignKey(to='Book')
author = models.ForeignKey(to='Author')
info = models.CharField(max_length=32)