我本意是想图片上传的时候,用数据库自增 id 作为图片的名称
models.py
class Goods(models.Model):
image = models.ImageField(upload_to=pic_path,verbose_name='封面图')
create_time = models.DateTimeField(auto_now_add=True,verbose_name='创建时间')
def pic_path(instance, filename):
#自定义保存路径和文件名
# 源文件名后缀
ext = filename.split('.')[-1]
# 文件名
# new_name = datetime.now().strftime('%Y%m/')+shortuuid.uuid()
# new_name =instance.id #无效
new_name =
# 拼接文件名和后缀
path = new_name + '.' + ext
return path
models.py
class Goods(models.Model):
image = models.ImageField(upload_to=pic_path,verbose_name='封面图')
create_time = models.DateTimeField(auto_now_add=True,verbose_name='创建时间')
def pic_path(instance, filename):
#自定义保存路径和文件名
# 源文件名后缀
ext = filename.split('.')[-1]
# 文件名
result = Goods.objects.values('id').order_by('id').last()
id = result['id']+1
new_name =str(id)
# 拼接文件名和后缀
path = new_name + '.' + ext
return path
添加前先查一下最大id,目前先这样解决了,如若有更好的方案,欢迎启奏哈~~~
1
111111111111 2020-01-05 15:26:43 +08:00 via Android
save 以后就有 id 了,然后再修改文件路径
|
2
SingeeKing 2020-01-05 15:28:18 +08:00
可以用 post_save signal 改名实现。如果是想创建阶段便命名为 ID 是不可能的 —— 因为保存之前还没有 ID
|
3
wd 2020-01-05 15:42:29 +08:00 via iPhone
建一个 sequance 没次需要名字都从 seq 取一个
|
4
2kCS5c0b0ITXE5k2 2020-01-05 16:31:13 +08:00
用 redis 自增啊
|
5
2kCS5c0b0ITXE5k2 2020-01-05 16:33:49 +08:00
不过还是推荐用雪花算法做唯一名吧 自增意义不大
|
7
beastk 2020-01-05 18:17:07 +08:00 via iPhone
用 hash 吧自己生成,不用等自增,比如时间戳➕随机数,或者原子,提前生成好就是唯一 id 了。
|
8
Erroad 2020-01-05 18:39:53 +08:00 via iPhone
时间戳+redis 自增+随机数
|