[英]Django: difference between ForeignKey and ManyToManyField
我似乎對 Django 的 ForeignKey 和 ManyToManyField 感到困惑。 假設我有以下兩個模型:
class Author(models.Model):
name = models.CharField(...)
class Paper(models.Model):
title = models.CharField(...)
一篇論文可能有多個作者。 我可以執行以下任一操作:
a) 在Paper
添加一個authors
字段並將作者添加到一個Paper
實例中:
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_paperauthor和app_paper_authors的名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.