Обработка загрузок файла перед объектом сохраняется

У меня есть модель как это:

class Talk(BaseModel):
  title        = models.CharField(max_length=200)
  mp3          = models.FileField(upload_to = u'talks/', max_length=200)
  seconds      = models.IntegerField(blank = True, null = True)

Я хочу проверить прежде, чем сохранить это, загруженным файлом является MP3, как это:

def is_mp3(path_to_file):
  from mutagen.mp3 import MP3
  audio = MP3(path_to_file)
  return not audio.info.sketchy

После того как я уверен, что у меня есть MP3, я хочу сохранить продолжительность разговора в атрибуте секунд, как это:

audio = MP3(path_to_file)
self.seconds = audio.info.length

Проблема, перед сохранением загруженный файл не имеет пути (см. этот билет, закрытый как wontfix), таким образом, я не могу обработать MP3.

Я хотел бы повысить хорошую ошибку проверки так, чтобы ModelForms может отобразить полезную ошибку ("Вы идиот, Вы не загружали MP3" или что-то).

Какая-либо идея, как я могу пойти о доступе к файлу, прежде чем это будет сохранено?

p.s. Если кто-либо знает, что лучшим способом проверить файлы является MP3s, я внимательно слушаю - я также хочу смочь бездельничать с данными ID3 (установите художника, альбом, заголовок и вероятно искусство альбома, таким образом, мне нужен он, чтобы быть processable мутагеном).

5
задан Dominic Rodger 9 May 2010 в 18:28
поделиться

1 ответ

Вы можете получить доступ к данным файла в request.FILES в вашем представлении.

Я думаю, что лучший способ - это привязать загруженные файлы к форме , переопределить метод формы clean , получить объект UploadedFile из cleaned_data, проверить его в любом случае, затем переопределите метод save и заполните экземпляр модели информацией о файле, а затем сохраните его.

9
ответ дан 13 December 2019 в 22:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: