下面是关于 Django 多对多表的创建、级联删除以及手动创建第三张表的完整攻略:
多对多表的创建
在 Django 中创建多对多关系的表格非常简单。我们需要使用models.ManyToManyField()
。下面是一个示例:
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField()
def __str__(self):
return self.name
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ManyToManyField(Author)
def __str__(self):
return self.title
在上面的模型中,我们创建了Author
和Book
这两个类,它们之间存在多对多关系,因为一个作者可以写多本书,一本书也可以由多个作者合作完成。
我们可以看到,在Book
类中,我们使用了models.ManyToManyField(Author)
来创建多对多关系。
级联删除
在上面的示例中,我们定义了一个多对多关系。当我们删除一个Author
对象时,相应的Book
对象应该也会被删除。这就是级联删除。
在 Django 中实现级联删除也非常简单。我们需要在ForeignKey
或ManyToManyField
中添加on_delete
参数,将其设置为models.CASCADE
,如下所示:
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ManyToManyField(Author, on_delete=models.CASCADE)
def __str__(self):
return self.title
在上面的示例中,我们向多对多关联的Author
中添加了on_delete=models.CASCADE
。
手动创建第三张表
在上面的示例中,我们创建了Book
和Author
两个类,并且它们之间有多对多的关系,因为一本书可以由多个作者合作完成,同样一个作者也可以写多本书。因此 Django 会自动创建一个名为myapp_book_authors
的中间表,用于存储书籍以及对应的作者信息。
如果我们想要手动创建这个中间表,可以使用through
参数。我们需要创建一个类来表示中间表,并将其传递给through
参数,如下所示:
class Authorship(models.Model):
book = models.ForeignKey(Book, on_delete=models.CASCADE)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author, through=Authorship)
def __str__(self):
return self.title
在上面的示例中,我们创建了一个名为Authorship
的类,该类表示中间表。Book
类使用了ManyToManyField
,并传递了through=Authorship
参数,以表示中间表。
经过上述攻略讲解,我们了解了 Django 中多对多关系表的创建、级联删除以及手动创建第三张表。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:django多对多表的创建,级联删除及手动创建第三张表 - Python技术站