0

当我运行 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)
4

1 回答 1

0

save=False在 save 方法中添加 a就可以了。

self.audiofile.save(file_name, mp3_fp, save=False)
于 2019-02-08T19:17:32.773 回答