Django save override никогда не останавливает сохранение сгенерированного gtts mp3 файла в каталог
Когда я запускаю метод сохранения переопределения, 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)
1 ответ
Решение
Добавление save=False
в методе сохранения сделал свое дело.
self.audiofile.save(file_name, mp3_fp, save=False)