Django的管理员 - 多对多的现场混乱

时间:2010-05-26 12:56:22

标签: python django

我正在教自己Django并创建个人投资组合网站。我已经设置了一个名为 FolioItem 的模型,该模型利用与另一个名为 FolioImage 的模型的多对多关系。每个FolioItem的想法可以有很多FolioImages。

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,但是images字段(与FolioImage相关的多对多)显示之前添加到其他FolioItems的所有现有FolioImage。

实际上这应该是空白的,因为它是一个新项目,并且还没有任何关联的图像。有没有办法在创建新项目时强制此选择器为空?

此外,当我尝试编辑现有条目时,我似乎无法添加或删除FolioImage关联(不存在小绿色+图标)。

任何建议都会很棒。

2 个答案:

答案 0 :(得分:1)

  

有没有办法强迫这个   选择器在创建时为空白   新项目?

我认为您对默认选择多个小部件的界面略感困惑。它向您显示所有现有图像,使它们可供您选择,但在全新项目上没有任何关系。您必须实际点击某个项目,或者执行shift(或控制) - 单击技巧以选择多个项目,然后保存您的作品集项目以建立关系。

  

此外,我似乎在尝试编辑时   我无法添加的现有条目或   删除FolioImage关联(   小绿色+图标不存在。)

同样,我认为你只需要点击或按住Ctrl键点击选择/取消选择你想要与你的项目相关联的图像。

您可能也有兴趣使用Django的酷水平或垂直滤镜而不是默认的选择多个界面。您还可以使用内联界面。更多详细信息包括herehere。我认为过滤器界面更加直观。

答案 1 :(得分:1)

我认为你在这里使用了错误的关系。如果您只希望FolioImages属于单个FolioItem,那么您应该使用FolioImage中的ForeignKey到FolioItem。然后,您可以配置管理界面以将项目的相关图像显示为内联表单集,这样您就可以仅添加该项目的图像。