Django 如何用自增 id 作为图片的名 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dolaxi
V2EX    问与答

Django 如何用自增 id 作为图片的名

  •  
  •   dolaxi 2020-01-05 15:05:09 +08:00 2030 次点击
    这是一个创建于 2120 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我本意是想图片上传的时候,用数据库自增 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 
    第 1 条附言    2020-01-05 16:00:39 +08:00
    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,目前先这样解决了,如若有更好的方案,欢迎启奏哈~~~

    8 条回复    2020-01-05 18:39:53 +08:00
    111111111111
        1
    111111111111  
       2020-01-05 15:26:43 +08:00 via Android
    save 以后就有 id 了,然后再修改文件路径
    SingeeKing
        2
    SingeeKing  
    PRO
       2020-01-05 15:28:18 +08:00
    可以用 post_save signal 改名实现。如果是想创建阶段便命名为 ID 是不可能的 因为保存之前还没有 ID
    wd
        3
    wd  
       2020-01-05 15:42:29 +08:00 via iPhone
    建一个 sequance 没次需要名字都从 seq 取一个
    2kCS5c0b0ITXE5k2
        4
    2kCS5c0b0ITXE5k2  
       2020-01-05 16:31:13 +08:00
    用 redis 自增啊
    2kCS5c0b0ITXE5k2
        5
    2kCS5c0b0ITXE5k2  
       2020-01-05 16:33:49 +08:00
    不过还是推荐用雪花算法做唯一名吧 自增意义不大
    dolaxi
    nbsp;   6
    dolaxi  
    OP
       2020-01-05 16:45:04 +08:00
    @emeab 我是担心数据量大了,如果 name 太复杂,又没有一定的递增,数据库索引压力比较大
    beastk
        7
    beastk  
       2020-01-05 18:17:07 +08:00 via iPhone
    用 hash 吧自己生成,不用等自增,比如时间戳随机数,或者原子,提前生成好就是唯一 id 了。
    Erroad
        8
    Erroad  
       2020-01-05 18:39:53 +08:00 via iPhone
    时间戳+redis 自增+随机数
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     838 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 20:54 PVG 04:54 LAX 13:54 JFK 16:54
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86