django数据库

时间:2012-12-01 02:27:56

标签: django django-models

我正在使用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

问题是,如果你有相同的设计,你会为每个摄影师和每个专辑创建一个目录,你将在父目录中创建另一个目录,然后将照片存储在该专辑的目录中或将它们存储在数据库中。我知道这是一个新手问题,但我真的需要帮助。如果你有其他设计让我更容易,请告诉我。

提前致谢, 阿卜杜勒

3 个答案:

答案 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中的内容。