我有一个这样的模型:
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,我想将谈话的长度保存在 seconds 属性中,如下所示:
audio = MP3(path_to_file)
self.seconds = audio.info.length
问题是,在保存之前,上传的文件没有路径(见这张票,关闭为wontfix
),所以我无法处理 MP3。
我想提出一个很好的验证错误,以便ModelForm
s 可以显示一个有用的错误(“你这个白痴,你没有上传 MP3”或其他东西)。
知道如何在保存文件之前访问文件吗?
ps 如果有人知道验证文件的更好方法是 MP3,我会全力以赴 - 我也希望能够处理 ID3 数据(设置艺术家、专辑、标题和可能的专辑封面,所以我需要它是可处理的通过诱变剂)。