簡體   English   中英

Django:ForeignKey 和 ManyToManyField 之間的區別

[英]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_paperauthorapp_paper_authors的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM