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

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

1、全自动(较为常用)

  优点:ORM自动创建第三张表

  不足之处:第三张表无法扩展额外的字段

后端models.py代码:

class Book(models.Model):
    name = models.CharField(max_length=32)
    author = models.ManyToManyField(to='Author')

class Author(models.Model):
    name = models.CharField(max_length=32)

 

2、纯手动(了解)

  优点:第三张表可以扩展额外的字段

  不足之处::ORM查询的时候会带来不便

后端models.py代码:

class Book(models.Model):
    name = models.CharField(max_length=32)

class Author(models.Model):
    name = models.CharField(max_length=32)

class Book_To_Author(models.Model):
    book = models.ForeignKey(to='Book')  # 手动指定对应外键的表
    author = models.ForeignKey(to='Author')  # 手动指定对应外键的表
    create_time = models.DateField(auto_now_add=True)

 

3、半自动(推荐)

  优点:第三张表可以扩展任意的额外字段,还可以利用orm 正反向查询

  不足之处:无法使用add set remove clear等操作,虽然无法使用,但是还可以自己直接操作第三张表

后端models.py代码:

class Book(models.Model):
    name = models.CharField(max_length=32)
    author = models.ManyToManyField(to='Author', through='Book_To_Author', through_fields=('book', 'author'))  # 多对多字段如果建立在book表,那么through_fields要把book参数放在前面、author参数放在后面

class Author(models.Model):
    name = models.CharField(max_length=32)
    # Book = models.ManyToManyField(to='Author', through='Book_To_Author', through_fields=('author', 'book'))  # 多对多字段如果建立在author表,那么through_fields要把author参数放在前面、book参数放在后面

class Book_To_Author(models.Model):
    book = models.ForeignKey(to='Book')
    author = models.ForeignKey(to='Author')
    create_time = models.DateField(auto_now_add=True)
posted @ 2020-12-12 19:23  chchcharlie、  阅读(664)  评论(0编辑  收藏  举报