2014-07-23 164 views
5

我讀過很多關於OneToOneField,ManyToManyField和Foreign Key的帖子,但他們並不十分清楚。我對Django和python編程非常陌生,目前正在嘗試開發模型。有人能用簡單的語言向我解釋,最好用例子來說明,他們各自是什麼?Django OneToOneField,ManyToManyField,Foreign Key

回答

8

想象一下,一個數據庫,其中存儲您的藏書:

from django.db import models 

class Place(models.Model): 
    address = models.CharField(max_length=50) 
    country = models.CharField(max_length=50) 

class Publisher(models.Model): 
    name = models.CharField(max_length=30) 
    place = models.OneToOneField(Place, primary_key=True) 

class Author(models.Model): 
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=40) 

class Book(models.Model): 
    title = models.CharField(max_length=100) 
    publisher = models.ForeignKey(Publisher) 
    authors = models.ManyToManyField(Author) 

一個一對多/外鍵

Book有一個Publisher,但Publisher可能已經出版多本書籍。因此他們處於一對多(書到發行商)的關係。

1對一個

Publisher位於一個Place,每Place只能容納一個Publisher。因此他們處於一對一的關係。您可以將Place信息(addresscountry)與Publisher模型放在一張表中,但有時候最好有獨立的模型。例如,如果您不知道每個PublisherPlace,則不需要佔用大量空行。

許多一對多

每個Book還具有一個或多個Author秒。然而,Author可能寫了多個Book,所以它們處於多對多的關係。

如果你還需要一些指導,我建議看看the model chapter of the Django Book

+1

優秀的答案。我還建議OP閱讀關於數據庫關係的內容,因爲它們直接應用這些Django字段。試試這個 - http://code.tutsplus.com/articles/sql-for-beginners-part-3-database-relationships--net-8561 –

+0

這清除了一切爲我!非常感謝你!對不起,我沒有足夠的信譽來解答你的答案=/ – Rjzheng

+0

@Rjzheng樂意幫忙。 (: – Banana