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)
Другие вопросы по тегам