У меня есть модель как это:
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" или что-то).
Какая-либо идея, как я могу пойти о доступе к файлу, прежде чем это будет сохранено?
p.s. Если кто-либо знает, что лучшим способом проверить файлы является MP3s, я внимательно слушаю - я также хочу смочь бездельничать с данными ID3 (установите художника, альбом, заголовок и вероятно искусство альбома, таким образом, мне нужен он, чтобы быть processable мутагеном).
Вы можете получить доступ к данным файла в request.FILES в вашем представлении.
Я думаю, что лучший способ - это привязать загруженные файлы к форме , переопределить метод формы clean , получить объект UploadedFile из cleaned_data, проверить его в любом случае, затем переопределите метод save и заполните экземпляр модели информацией о файле, а затем сохраните его.