我正在使用django设计一个网站。网站的想法是让摄影师和每位摄影师都有一张专辑或更多专辑,每张专辑都会有一张或多张照片/照片。目前我有:
class Photo(models.Model):
name=models.ForeignKey('Album')
p=models.ImageField()
def __unicode__(self):
return self.name
class Album(models.Model):
name=models.ForeignKey('Photographer')
def __unicode__(self):
return self.name
class Photographer(models.Model):
name=models.ForeignKey('User')
def __unicode__(self):
return self.name
问题是,如果你有相同的设计,你会为每个摄影师和每个专辑创建一个目录,你将在父目录中创建另一个目录,然后将照片存储在该专辑的目录中或将它们存储在数据库中。我知道这是一个新手问题,但我真的需要帮助。如果你有其他设计让我更容易,请告诉我。
提前致谢, 阿卜杜勒
答案 0 :(得分:2)
使用imagefield将所有照片存储在一个位置,甚至可以更好地将它们存储在云存储服务中。至于关于关于相册和摄影师的照片模型中的ForeignKeys的关系。比使用反向关系找出每张专辑或摄影师的照片。
您的代码可能看起来像这样`
class Photo(models.Model):
image = ImageField(upload_to="whereever you want to")
album = ForeignKey(Album)
photographer=ForeignKey(Photographer)
在您获得特定专辑后,您可以使用 Album.set_all和photographer.set_all获取特定专辑或摄影师的所有照片
`
答案 1 :(得分:1)
是的,将照片直接存储在文件系统中,而不是数据库中。这是一种常见的做法,其理由有很多,主要与性能有关。
如果您希望拥有照片,请不要将它们保留在一个目录中,这会导致流行系统出现性能问题。相反,请设计适合您应用的简单层次结构。
答案 2 :(得分:1)
无需为摄影师或专辑创建目录。这就是数据库的用途。您可以拥有一个巨大的文件夹(在upload_to
中指定),其中包含所有摄影师和专辑的上传图像,然后是数据库以跟踪哪些照片属于哪个摄影师/专辑。
顺便说一下,您应为upload_to
指定ImageField
参数:
models.ImageField(upload_to='images/')
如果你真的想为每张专辑创建文件夹,你可以将一个函数传递给upload_to
参数并添加你想要的任何逻辑...更多关于文档here中的内容。