Обработка загрузки файла перед сохранением объекта
У меня есть такая модель:
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 (указать исполнителя, альбом, название и, возможно, обложку альбома, поэтому мне нужно, чтобы он обрабатывалсямутаген).