保存 Django FileField 时的路径重复

问题描述

我有一个包含音频文件的字段:

    class Meditation(models.Model):
        name = models.CharField(max_length=50)
        audio = models.FileField(upload_to='AudioTracks')
        length = models.IntegerField(blank=True,null=True)

此外,我还有将音频转换为 .m4a 并计算音频长度的前置信号:

    @receiver(pre_save,sender=Meditation)
    def setLengthMeditation(sender,**kwargs):
        meditation = kwargs['instance']
        if kwargs['update_fields']:
            audio = mp4.MP4(meditation.audio)
            length = audio.info.length
            meditation.length = length


    @receiver(post_save,sender=Meditation)
    def setLengthToCourse(sender,**kwargs):
        meditation = kwargs['instance']
         if not kwargs['update_fields']:
             newPath = meditation.audio.name.split('.')[0] + '.m4a'
             command = 'ffmpeg -i {} -movflags +faststart -b:a 128K -af "afade=t=in:st=0:d=2" {}'.format(meditation.audio.name,newPath)

             subprocess.call(command,shell=True)

             meditation.audio = File(open(newPath,'rb'))
             meditation.save(update_fields=['audio','length'])

因此,如您所见,当我将音频从任何格式转换为 .m4a 时,我会尝试将新音频指向现有模型:

        command = 'ffmpeg -i {} -movflags +faststart -b:a 128K -af "afade=t=in:st=0:d=2" {}'.format(meditation.audio.name,newPath)
        subprocess.call(command,shell=True)
        meditation.audio = File(open(newPath,'rb'))

问题是,当我将模型指向现有文件时,Django 将其保存在 upload_to 中,它就像 {Audiotracks/} + file.name {AudioTracks/file.m4a} = AudioTracks/AudioTracks/file.m4a

问题是,我能否以某种方式让 Django 不复制文件或在保存时剪切路径,以免发生重复

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)