Django:ForeignKey和ManyToManyField之间的区别

时间:2016-07-03 16:32:51

标签: django model foreign-keys many-to-many

我似乎对Django的ForeignKey和ManyToManyField感到困惑。假设我有以下两个模型:

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

class Paper(models.Model):
    title = models.CharField(...)

一篇论文可能有几位作者。我可能会做以下任何一种情况:

a)在authors中添加Paper字段,并将作者添加到Paper个实例:

    authors = models.ManyToManyFields(Author)

b)或者,我可以创建另一个包含论文作者的模型:

class PaperAuthor(models.Model):
    paper = models.ForeignKey(Paper)
    author = models.ForeignKey(Author)

以上哪两个是正确的?

2 个答案:

答案 0 :(得分:2)

在mysql级别,

Django为多个Field创建了一个单独的表。

class PaperAuthor(models.Model):
    paper = models.ForeignKey(Paper)
    author = models.ForeignKey(Author)

tablename : app_paperauthor

| id | paper_id | author_id |
| 1  | 1        | 1         |
| 2  | 2        | 2         |

和manytomany字段创建如下表格。

class Paper(models.Model):
    title = models.CharField(...)
    authors = models.ManyToManyFields(Author)

tablename : app_paper_authors

| id | paper_id | author_id   |
| 1  | 1        | 1           |
| 2  | 1        | 2           |

答案 1 :(得分:1)

这些完全相同。 ManyToManyField会自动为您创建“直通”表;唯一的区别在于,它使您能够使用单个表达式访问论文的所有作者或作者的所有论文。