【问题标题】:Generating URL using Autofield before model is saved在保存模型之前使用 Autofield 生成 URL
【发布时间】:2013-01-07 21:38:37
【问题描述】:

我希望我的图片 url 是 /img/1 和 /img/2,我认为使用分配给每个模型的自动递增 id 将是完美的,这样每个 url 都会有所不同。问题是模型的实例在保存之前没有 id。这是来自 models.py 的以下代码中的一个问题:

def update_filename(instance, filename):
    a = type(instance.id)
    if a is not int:
        a = 1
    else: 
        a = instance.id
    path = "img" + "/" + str(a) + ".jpg"
    return path

class User_Image(models.Model):
    image = models.ImageField(upload_to=update_filename) 

关于如何解决此问题的任何建议? django保存图片时每个实例的id都是None,所以每张图片都以“None”或“None_1”等形式保存到我的img目录中。

【问题讨论】:

标签: python django image url


【解决方案1】:

你不能。来自documentation

在大多数情况下,这个对象不会被保存到数据库中 然而,所以如果它使用默认的 AutoField,它可能还没有 其主键字段的值。

我使用这样的功能:

import uuid
def update_filename(instance, filename):
    """ Rename picture """

    extension = os.path.splitext(filename)[1]
    return 'img/%s%s' % (uuid.uuid4(), extension) 

【讨论】:

  • 我打算这样做,但问题是 URL 非常长。为每个用户创建一个目录,例如 img/user1/1291219.jpg 会给网站带来很大压力吗?这样,我可以将随机生成的数字减少到几位数,因为没有人会从一个帐户将这么多图片上传到我的网站
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-10
  • 2020-12-15
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多