Как сохранить аудиофайл, полученный через Javascript/ajax, в django media

Я записываю голос через микрофон с фронт-энда с помощью javascript и отправляю его обратно с помощью ajax.

<center>
  <p>
    {% csrf_token %}

    <button class="btn btn-primary py-3 px-5" id=record>Record</button>
    <button class="btn btn-primary py-3 px-5" id=stopRecord disabled>Stop</button>
  </p>
  <p>
    <audio id=recordedAudio></audio>
  </p>
  <h4 id="result" > Result</h4> 
</center>

Это мой html шаблон
Ajax файл

$.ajax({
                type: 'POST',
                url: '/demo/audio/',
                data: fd,
                dataType: 'text'
              })

Я не создавал никакой модели для этого. Вот функция views.py

def audio_demo(request):
    if request.method=='POST':
        req=request.POST.get('data')
        d=req.split(",")[1]
        file_name='sub_app/media/file_{}.oga'.format(random.randint(0,99))
        with open(file_name, 'wb') as f:
            f.write(base64.b64decode(d))

Хотя это сохранение в папке media, но это не правильный способ. Я думаю, что правильный способ - это создать объект модели, как мы делаем для поля file или image. Но я не хочу загружать файл, как в поле file. Вместо этого я хочу записать его. Моя конечная цель - хранить аудиофайл в папке media, которая на самом деле является ведром S3, а затем получить путь к файлу. Приведенный выше фрагмент кода сохраняет файл, но в локальной папке media, а не на S3. Для уточнения, моя папка media настроена на S3. Мои изображения загружаются туда.

Edit. Я создал поле модели.

class Audio(models.Model):
    audio_id=models.AutoField(primary_key=True)
    audio = models.FileField(upload_to='audio/')
    class Meta: verbose_name_plural = 'Audios'
    def __str__(self):
        return self.audio_id

Теперь идея заключается в том, чтобы вставить аудио в модель

if request.method=='POST':
        audio=models.Audio()
        req=request.POST.get('data')
        d=req.split(",")[1]
#here should be a way to insert audio to audioModel instead of locally saving it.
Вернуться на верх