Django多对多表的三种创建方式
第一种:
django orm自动帮我们创建:
表一:
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)
这种方式可以让Django迅速的帮我们建一张关系表出来,好处是可以通过这张表进行跨表查询,坏处是一张虚拟表,拓展性差。
第二种:
存手动创建第三张表:
class Book(models.Model): name = models.CharField(max_length=32)
class Author(models.Model): name = models.CharField(max_length=32)
class Book2Author(models.Model): book = models.ForeignKey(to='Book') author = models.ForeignKey(to='Author') info = models.CharField(max_length=32)
这种方式无法通过orm跨表查询(不要使用)
第三种:
半自动创建第三张表(可拓展性高,并且能够符合orm查询)
class Book(models.Model): name = models.CharField(max_length=32) authors = models.ManyToManyField(to='Author',through='Book2Author',through_fields=('book','author')) # 哪张表创建的就优先写哪张表的小写
class Author(models.Model): name = models.CharField(max_length=32)
class Book2Author(models.Model): book = models.ForeignKey(to='Book') author = models.ForeignKey(to='Author') info = models.CharField(max_length=32)