我似乎对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)
以上哪两个是正确的?
答案 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会自动为您创建“直通”表;唯一的区别在于,它使您能够使用单个表达式访问论文的所有作者或作者的所有论文。