我正在教自己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关联(不存在小绿色+图标)。
任何建议都会很棒。
答案 0 :(得分:1)
有没有办法强迫这个 选择器在创建时为空白 新项目?
我认为您对默认选择多个小部件的界面略感困惑。它向您显示所有现有图像,使它们可供您选择,但在全新项目上没有任何关系。您必须实际点击某个项目,或者执行shift(或控制) - 单击技巧以选择多个项目,然后保存您的作品集项目以建立关系。
此外,我似乎在尝试编辑时 我无法添加的现有条目或 删除FolioImage关联( 小绿色+图标不存在。)
同样,我认为你只需要点击或按住Ctrl键点击选择/取消选择你想要与你的项目相关联的图像。
您可能也有兴趣使用Django的酷水平或垂直滤镜而不是默认的选择多个界面。您还可以使用内联界面。更多详细信息包括here和here。我认为过滤器界面更加直观。
答案 1 :(得分:1)
我认为你在这里使用了错误的关系。如果您只希望FolioImages属于单个FolioItem,那么您应该使用FolioImage中的ForeignKey到FolioItem。然后,您可以配置管理界面以将项目的相关图像显示为内联表单集,这样您就可以仅添加该项目的图像。