2016-07-03 14 views
0

Ich habe Verwirrung über Djangos ForeignKey und ManyToManyField. Angenommen, ich habe die folgenden zwei Modelle:Django: Unterschied zwischen ForeignKey und ManyToManyField

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

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

Ein Papier kann mehrere Autoren haben. Ich kann eine der beiden folgenden tun:

a) Fügen Sie ein authors Feld in Paper und fügen Autoren zu einer Paper Beispiel:

authors = models.ManyToManyFields(Author) 

b) Oder kann ich ein anderes Modell erstellen, das die Autoren eines enthält Papier:

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

Welcher der oben genannten zwei ist richtig?

Antwort

1

Das sind genau gleichwertig. Ein ManyToManyField erstellt automatisch diese "durch" -Tabelle für Sie; Der einzige Unterschied besteht darin, dass Sie mit einem einzigen Ausdruck auf alle Autoren für eine Arbeit oder auf alle Arbeiten für einen Autor zugreifen können.

1

In mysql Ebene, erstellt

Django eine separate Tabelle für die ManyToMany 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   | 

und das ManyToMany Feld erzeugt wie unten eine Tabelle.

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   | 
Verwandte Themen