2010-12-05 20 views
0

我目前正在掌握一些在Django中的精細點,我開始認真地使用它。我有一個例子,我有幾個外鍵關係,並且我想保持對象不同。下面是一個簡單models.py例如:Django:維護單獨的對象組,幾乎像'子女'

class CopyOfBook(models.Model): 
    barcode = models.CharField(max_length=100) 

class Book(models.Model): 
    title = models.CharField(max_length=100) 
    copies = models.ManyToManyField(CopyOfBook) 

class Library(models.Model): 
    name = models.CharField(max_length=100) 
    books = models.ManyToManyField(Book) 

這些組件中的每一個取決於其母公司 - 例如,一本書不可能存在一個圖書館的外面,是具體到單個庫中。我知道這是一個稍微做作的例子,但是在Django中對此進行建模的最佳方式是什麼?

問題是,如果您打開管理員並添加了一本新書,您將看到所有CopyOfBook實例的列表,而不僅僅是屬於該書的那些列表(添加新書時一個,將是一個空的列表)。

希望我已經解釋清楚了,如果您需要澄清,請告訴我。

更新:我一直在嘗試使用ManyToMany.limit_choices_to,並在參數使用適當的related_name,但沒有太多的喜悅。

回答

1

您應該首先考慮您的實體關係模型。

CopyOfBook有一本書和一個圖書館。所以你可以給它一個ForeignKey給每個。

書籍和圖書館只通過CopyOfBook連接。因此,雖然這不是嚴格必要的(上面兩個ForeignKey就足夠了),但您可以通過通過= CopyOfBook爲Library提供一個ManyToMany關係。

0

如果一本書是特定於一個單一的庫,你應該有一個ForeignKey圖書館,而不是ManyToManyFieldLibrary。此外,我想CopyOfBook也將是一本書的具體內容,所以同樣適用於此!

然後您可以通過InlineModelAdmins管理書籍和副本!

0

ManyToMany您與LibraryBook之間的關係很好,因爲多個圖書館可以擁有相同的圖書。但是,您在BookCopyOfBook之間的ManyToMany關係對我來說沒有任何意義。特定的副本可以是特定的書。你應該有什麼,而不是一個many-to-one (ForeignKey)關係,這將關聯一本特定的書和它的不止一個副本。

+0

那麼他說的是一本書是特定的單個庫.... – 2010-12-05 16:30:14