我有這樣一個模型:處理文件上傳保存
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
p在保存之前,上傳的文件沒有路徑(參見this ticket,關閉爲wontfix
),所以我無法處理MP3。
我想提出一個很好的驗證錯誤,以便ModelForm
s可以顯示一個有用的錯誤(「你這個白癡,你沒有上傳MP3」或什麼的)。
任何想法如何在保存之前訪問文件?
p.s.如果有人知道更好的驗證文件的方式是MP3,那麼我都很喜歡 - 我也希望能夠處理ID3數據(設置藝術家,專輯,標題和專輯封面,所以我需要它可以通過mutagen)。
+1和接受!這似乎是要走的路 - 似乎有點遺憾,沒有一種使用新型模型驗證的優雅方法。 – 2010-05-10 15:04:13
也許你可以,但它是相當新的,我還不夠熟悉。 – 2010-05-10 15:12:10