2016-07-03 1 views
0

DjangoのForeignKeyとManyToManyFieldについて混乱しているようです。仮に私は、次の2つのモデルがあります:Django:ForeignKeyとManyToManyFieldの違い

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

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

紙が複数の著者を持つことができます。

A)Paperauthorsフィールドを追加し、Paperインスタンスに著者を追加します:私は、以下のいずれかを行うことができます

authors = models.ManyToManyFields(Author) 

B)または、私はAの著者が含まれている別のモデルを作成することができます論文:

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

どれが正しいですか?

答えて

1

これらはまったく同等です。 ManyToManyFieldは自動的にその "スルー"テーブルを作成します。唯一の違いは、1つの表現で、論文の全著者、または著者のすべての論文にアクセスできることです。 MySQLのレベルで

1

Djangoは多対多のフィールドのために別々のテーブルを作成します。

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   | 
関連する問題