2010-05-26 43 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。我认为过滤界面更直观。