2010-05-26 40 views
1

我教自己Django並創建個人投資組合網站。我已經建立了一個名爲FolioItem的模型,該模型利用了與另一個稱爲FolioImage的模型的多對多關係。每個FolioItem的想法都可以有許多FolioImages。Django的管理員 - 多對多的現場混淆

class FolioImage(models.Model): 
    image = models.FileField(upload_to='portfolio_images') 
    def __unicode__(self): 
     return self.image.name 

class FolioItem(models.Model): 
    title = models.CharField(max_length=50) 
    thumbnail = models.FileField(upload_to='portfolio_images') 
    images = models.ManyToManyField(FolioImage) 
    def __unicode__(self): 
     return self.title 

在Django的管理界面,可以創建新的FolioItem的但圖像字段(多到很多關於一個FolioImage)是顯示現有的所有FolioImage的添加先前給其他FolioItems。

真的這應該是空白的,因爲它是一個新的項目,並沒有任何相關的圖像。有什麼辦法強制這個選擇器在創建一個新項目時是空白的?

此外,它似乎當我嘗試編輯現有的條目,我不能添加或刪除FolioImage關聯(小綠色+圖標不存在)。

任何建議將是偉大的。

回答

1

我認爲你在這裏使用錯誤的關係。如果您只希望FolioImages屬於單個FolioItem,那麼您應該將FolioImage中的ForeignKey用於FolioItem。然後,您可以配置管理界面,將項目的相關圖像顯示爲內嵌窗體集,這將允許您僅添加編輯該項目的圖像。

+0

謝謝。我不知道內聯模型是如何工作的。這種方法效果更好,並且更有意義,因爲單個FolioImage只會與單個FolioItem關聯。 – Groady 2010-05-27 23:06:00

1

有什麼辦法創造一個 新項目時,迫使該 選擇是空白?

我覺得你對接口默認選擇多個小部件有些困惑。它會向您展示所有現有的圖像,使它們成爲您的選擇,但是全新項目之間沒有任何關係。您必須實際點擊一個項目,或者進行轉換(或控制) - 單擊竅門以選擇多個項目,然後保存您的作品集項目以建立關係。

而且,似乎當我試圖編輯 現有條目我不能添加或刪除 協會FolioImage(在 綠色小+圖標不存在)。

再次,我認爲您只需點擊或按住Ctrl鍵並單擊以選擇/取消選擇要與您的項目關聯的圖像。

您可能也有興趣使用Django的酷水平或垂直過濾器,而不是默認選擇多接口。您也可以使用內聯界面。更多細節是herehere。我認爲過濾界面更直觀。