Django ImageField上载位置的文件名可以是什么?
每当我用Django ImageField上载位置的文件名可以是什么?,django,django-models,Django,Django Models,每当我用Cloth\u image创建Cloth模型时,图像就会上传到upload\u位置 我的问题是instance.id返回None,因为实例尚未创建ImageField的最佳上传位置是什么? def upload_location(instance, filename): new_id = instance.id ext = filename.split('.')[-1] return "clothes/%s/%s.%s" % (instance.user.id,
Cloth\u image
创建Cloth
模型时,图像就会上传到upload\u位置
我的问题是instance.id
返回None
,因为实例尚未创建ImageField的最佳上传位置是什么?
def upload_location(instance, filename):
new_id = instance.id
ext = filename.split('.')[-1]
return "clothes/%s/%s.%s" % (instance.user.id, new_id, ext) # <- Right Here!
class Cloth(models.Model):
cloth_image = models.ImageField(upload_to=upload_location,
null=True,
blank=True)
def上传位置(实例、文件名):
new_id=instance.id
ext=filename.split('.')[-1]
返回“costs/%s/%s.%s”%(instance.user.id,new#id,ext)#只需使用文件名而不使用id,例如
os.path.join('clothes', instance.user.id, filename)
如果文件名已经存在,不用担心,Django会自动在末尾添加随机字符串,以避免文件替换。如果您想要唯一的文件名,我想您可以使用uuid
import uuid
import os
def get_file_path(instance, filename):
base_dir = 'clothes'
user.id = str(instance.user.id)
ext = filename.split('.')[-1]
filename = "%s.%s" % (uuid.uuid4(), ext)
return os.path.join(base_dir, user_id, filename)
我喜欢这个主意。如果uuid.uuid4()生成了以前的id怎么办?他们是否将以前生成的id存储到某个地方?如果不是,它只是一个随机整数,不是吗?这是一个基于许多参数的复合字段,你可以读取更多的嗯。。确切地我想为图像文件名生成真正的唯一id:(nvm uuid在生成随机文件名方面是非常合法的。很酷的东西!感谢您的帮助)