Django ImageField:如何使upload_to参数依赖于self.id?

时间:2011-12-16 13:54:33

标签: django django-models

有一个网站有100万用户,他们都至少有一个个人资料图片(可能更多)。

我不确定,但我认为将所有图像存储在一个文件夹中并不是很聪明(就速度而言,因为需要一些时间才能在该文件夹中的一百万个以上的图像之间找到一个图像需要更多时间在那里找到任何东西)。

因此,作为一种变体,我们可以将图像存储在不同的文件夹中(即使嵌套文件夹的级别很少)。

例如:ID为1-1000的用户将其图像存储在文件夹1中; ID为1001-2000的用户将其图像存储在文件夹2中,依此类推......

要做到这一点,我们需要ImageField的upload_to参数必须是动态的(取决于用户ID或换句话说self.id)。

有没有办法让它变得动态? 或者可能有更合适的方法来实现这种情况?

提前致谢!!!

1 个答案:

答案 0 :(得分:1)

您可以将函数定义为upload_to参数...在您的情况下:

def upload_to_by_id(instance, filename):
    if instance.id:
        # you already have an id (updating a model with a new file)
        folder = str(self.id/1000 +1)
    else:
        # maybe you still don't have an id!! this can happen a lot... :/
        folder = 'tmp'

    return '%s/%s' % (folder, filename)

希望这有帮助!