Django ImageField : how to make upload_to parameter dependent on self. ID?

标签 django django-models

假设有一个拥有 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/

相关文章:

python - 如何在 Django 中将 select_related 与 GenericForeignKey 一起使用?

python - 错误 'QuerySet' 对象没有属性 'subscribers'

python - MySQLdb 未将表设置为 UTF-8

python - 创建一个 Django Form 来保存两个模型

django - 模型和字段验证中的 clean() 方法

python - 注释喜爱的项目的正确方法

python - Django 发出 IPC 信号

python - .env 'PAYPAL_API_USERNAME' 未定义

django - 基于 ForeignKey 对象从模型中获取对象

python - 您可以从 Django ORM 的父类(super class)模型中访问子类模型吗?