Django:ForeignKey和ManyToManyField的区别
我似乎对Django的外键和ManyToManyField感到困惑。假设我有以下两种模型:Django:ForeignKey和ManyToManyField的区别,django,model,foreign-keys,many-to-many,Django,Model,Foreign Keys,Many To Many,我似乎对Django的外键和ManyToManyField感到困惑。假设我有以下两种模型: class Author(models.Model): name = models.CharField(...) class Paper(models.Model): title = models.CharField(...) 一篇论文可能有几个作者。我可以做以下任何一项: a) 在论文中添加作者字段,并将作者添加到论文实例: authors = models.ManyToMa
class Author(models.Model):
name = models.CharField(...)
class Paper(models.Model):
title = models.CharField(...)
一篇论文可能有几个作者。我可以做以下任何一项:
a) 在论文
中添加作者
字段,并将作者添加到论文
实例:
authors = models.ManyToManyFields(Author)
b) 或者,我可以创建另一个包含论文作者的模型:
class PaperAuthor(models.Model):
paper = models.ForeignKey(Paper)
author = models.ForeignKey(Author)
以上两项中哪一项是正确的?它们完全相同。ManyToManyField会自动为您创建“直通”表;唯一的区别是,它使您能够通过一个表达式访问一篇论文的所有作者,或者访问一位作者的所有论文。在MySQL级别 Django为多对多字段创建一个单独的表
class PaperAuthor(models.Model):
paper = models.ForeignKey(Paper)
author = models.ForeignKey(Author)
tablename : app_paperauthor
select * from app_paperauthor;
| id | paper_id | author_id |
| 1 | 1 | 1 |
| 2 | 2 | 2 |
多对多字段创建如下表
class Paper(models.Model):
title = models.CharField(...)
authors = models.ManyToManyField(Author)
tablename : app_paper_authors
select * from app_paper_authors;
| id | paper_id | author_id |
| 1 | 1 | 1 |
| 2 | 1 | 2 |
因此,不同之处在于表名app\u paperauthor和app\u paperauthors