У меня есть такая модель:
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
s мог отображать полезную ошибку («Ты идиот, ты не загрузил MP3» или что-то в этом роде).
Любая идея, как я могу получить доступ к файлу до его сохранения?
пс. Если кто-нибудь знает лучший способ проверки файлов в формате MP3, я весь в слух - я также хочу иметь возможность возиться с данными ID3 (установить исполнителя, альбом, название и, возможно, обложку альбома, поэтому мне нужно, чтобы он обрабатывался мутаген).