假设有一个拥有 100 万用户的网站,他们都至少有一张个人资料图片(也许更多)。
我不确定,但我认为将所有图像存储在一个文件夹中并不是很明智(就速度而言,因为需要一些时间才能在该文件夹中的一百万个和更多图像之间找到一个图像需要更多是时候在那里找到任何东西了)。
因此,作为一种变体,我们可以将图像存储在不同的文件夹中(即使是几层嵌套文件夹)。
例如:id为1-1000的用户将把他们的图片存储在文件夹1中; ID 为 1001-2000 的用户会将其图像存储在文件夹 2 中,依此类推...
为此,我们需要 ImageField 的 upload_to
参数必须是动态的(取决于用户 ID,或者换句话说 self.id
)。
有什么方法可以使其动态化吗? 或者也许有一些更合适的方法来实现这个场景?
提前致谢!!!
最佳答案
您可以将函数定义为 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)
希望这有帮助!
关于Django ImageField : how to make upload_to parameter dependent on self. ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8535189/