【问题标题】:Django ImageField: how to make upload_to parameter dependent on self.id?Django ImageField:如何使upload_to参数依赖于self.id?
【发布时间】:2012-01-22 00:57:52
【问题描述】:

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

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

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

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

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

有什么方法可以让它动态化吗? 或者也许有一些更合适的方法来实现这个场景?

提前致谢!!!

【问题讨论】:

    标签: django django-models


    【解决方案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)
    

    希望这会有所帮助!

    【讨论】:

    • 这个函数应该放在哪里?是在模型类下面还是和模型类分开?
    猜你喜欢
    • 2011-02-08
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 2012-06-27
    • 2011-01-15
    • 2012-02-23
    • 1970-01-01
    相关资源
    最近更新 更多