在保存模型之前使用Autofield生成URL

时间:2013-01-24 07:38:43

标签: python django image url

我希望我的图片网址是/ img / 1和/ img / 2,我认为使用分配给每个模型的自动增加的ID对于此是完美的,因此每个网址都会有所不同。问题是模型的实例在保存之前没有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保存pic时,每个实例的id都是None,因此每个图像都保存到我的img目录中,如“None”或“None_1”等等。

1 个答案:

答案 0 :(得分:0)

你做不到。来自documentation

  

在大多数情况下,此对象不会保存到数据库中   但是,如果它使用默认的AutoField,它可能还没有   主键字段的值。

我使用这样的函数:

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

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