Django save override 永远不会停止将 gtts 生成的 mp3 文件保存到目录

Django save override never stops saving gtts generated mp3 file to directory

当我运行 save override 方法时,mp3 文件被保存到指定的文件夹,只是它不断地将自己保存到那个目录,直到我最终重新启动服务器。

文件保存到正确的地方,可以用VLC播放,所以至少有...

看来问题仍然存在于我包含的两个保存模型中。 我猜 super().save() 永远不会 运行,但我真的不知道发生了什么,简单地说。

我做错了什么,为什么会出现多重保存,我应该如何解决?

from django.db import models
from PIL import Image
from gtts import gTTS
from io import BytesIO
import tempfile
from django.core.files import File

class VoiceModel(models.Model):
    name = models.CharField(max_length=50)
    ...
    audiofile = models.FileField(upload_to='sounds/loads', max_length=100, blank=True, null=True) # editable=False)

    def __str__(self):
        return self.name

    def save(self, *args, **kwargs):
        new_string = 'repeat after me: ' + str(self.name)
        file_name = '{}.mp3'.format(str(self.name).lower().replace(' ', '_'))
        make_sound = gTTS(text=new_string, lang='en')
        mp3_fp = BytesIO()
        make_sound.write_to_fp(mp3_fp)
        self.audiofile.save(file_name, mp3_fp)
        super(VoiceModel, self).save(*args, **kwargs)

    # def save(self, *args, **kwargs):
    #     new_string = 'repeat after me: ' + str(self.name)
    #     audiofile = gTTS(text=new_string, lang='en')
    #     with tempfile.TemporaryFile(mode='wb+') as f:
    #     # with tempfile.TemporaryFile(mode='w') as f:
    #     # with tempfile.TemporaryFile(mode='rb+') as f:
    #         audiofile.write_to_fp(f)
    #         file_name = '{}.mp3'.format(self.name).lower().replace(' ', '_')
    #         self.audiofile.save(file_name, File(file=f))
    #     super(VoiceModel, self).save(*args, **kwargs)

在保存方法中添加一个 save=False 就可以了。

self.audiofile.save(file_name, mp3_fp, save=False)