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

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

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.

Я хотел бы поднять хорошую ошибку проверки, чтобыModelFormМожет отображаться полезная ошибка («Ты идиот, ты не загрузил MP3» или что-то в этом роде).

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

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

Ответы на вопрос(3)

Ваш ответ на вопрос