2010-04-23 164 views
4

我剛剛學習django並遵循教程。我有一個鏈接和一個書籤。與我正在遵循的教程不同,我希望鏈接僅與一個書籤關聯,但書籤可以有多個鏈接。這是設置模型的方式嗎?Django模型:多對多或多對一?

class Link(models.Model): 
    url = models.URLField(unique=True) 
    bookmark = models.ForeignKey(Bookmark) 

class Bookmark(models.Model): 
    title = models.CharField(maxlength=200) 
    user = models.ForeignKey(User) 
    links = models.ManyToManyField(Link) 

回答

6

號從收藏中刪除模型links,以及訪問鏈接對象爲特定的書籤,您將使用bookmark.link_set.all()(其中書籤是一個特定的收藏對象)。 Django爲你填充反向關係。

或者如果您願意,請在bookmark ForeignKey中提供您自己的related name,如果您不喜歡「link_set」,則爲「鏈接」。

4

在一個模型中定義關係就足夠了。 Django會自動在另一個模型中創建一個屬性。

如果你想有一個鏈接,只有一個書籤關聯,定義Link外鍵回指向一個Bookmark對象:

class Bookmark(models.Model): 
    title = models.CharField(max_length=200) 
    user = models.ForeignKey(User) 

class Link(models.Model): 
    url = models.URLField(unique=True) 
    bookmark = models.ForeignKey(Bookmark) 

要訪問書籤的鏈接,使用bookmark.link_set。這個屬性是由Django自動創建的。

1

不,從Bookmark刪除links =聲明 - 什麼爲您預定義的書籤是一個屬性link_set這對他們的書籤是這個鏈接查詢(你可以重命名屬性,但是真的沒有必要)。

1

如果我改變的代碼,因爲這 例如: 類書籤(models.Model): 標題= models.CharField(MAX_LENGTH = 200)

class Link(models.Model): 
    url = models.URLField(unique=True) 
    bookmark = models.ForeignKey(Bookmark) 

對他們來說是正確的關係,