Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在保存模型之前使用自动字段生成URL_Python_Django_Image_Url - Fatal编程技术网

Python 在保存模型之前使用自动字段生成URL

Python 在保存模型之前使用自动字段生成URL,python,django,image,url,Python,Django,Image,Url,我希望我的图像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

我希望我的图像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保存pic时,每个实例的id都是None,因此每个图像都以“None”或“None_1”等形式保存到我的img目录中。

您不能这样做。从:

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

我使用如下函数:

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,会给站点带来很大的压力吗?这样,我可以将随机生成的数字减少到两位数,因为没有人会从一个帐户上传那么多图片到我的网站