Django设置多对多关系的3种方法

1. Django帮我们生成第三张表

class Author(models.Model):
    name = models.CharField(max_length=32)
    book = models.ManyToManyField('Book') #不在author表中生成字段,而是自动产生第3张表author_book,只会产生author_id和book_id的字段

2. 自己创建第三张表

class AuthorBook(models, models):
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    book = models.ForeignKey(Book, on_delete=models.CASCADE)
    date = models.DateField() #可以自己任意新增字段

3. 自建的表和Django自动生成的表联合使用

class Author(models.Model):
    name = models.CharField(max_length=32)
    book = models.ManyToManyField('Book', through='AuthorBook', through_fields=['author', 'book'])


class AuthorBook(models, models):
    author = models.ForeignKey(Author, related_name='a', on_delete=models.CASCADE) #related_name用于反向查询
    book = models.ForeignKey(Book, on_delete=models.CASCADE)
    date = models.DateField()
    reference = models.ForeignKey(Author, related_name='b', on_delete=models.CASCADE)#reference表示推荐人

版权声明:本文为weixin_42612178原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。