【发布时间】:2011-02-17 21:26:36
【问题描述】:
所以,我正在努力实现my previous question 的答案。
这是我的模型:
class Talk(models.Model):
title = models.CharField(max_length=200)
mp3 = models.FileField(upload_to = u'talks/', max_length=200)
这是我的表格:
class TalkForm(forms.ModelForm):
def clean(self):
super(TalkForm, self).clean()
cleaned_data = self.cleaned_data
if u'mp3' in self.files:
from mutagen.mp3 import MP3
if hasattr(self.files['mp3'], 'temporary_file_path'):
audio = MP3(self.files['mp3'].temporary_file_path())
else:
# What goes here?
audio = None # setting to None for now
...
return cleaned_data
class Meta:
model = Talk
Mutagen 需要磁盘上类似文件的对象或文件名(我认为) - 第一种情况(上传的文件大于内存中处理的文件大小)工作正常,但是我不知道如何处理我得到的InMemoryUploadedFile。我试过了:
# TypeError (coercing to Unicode: need string or buffer, InMemoryUploadedFile found)
audio = MP3(self.files['mp3'])
# TypeError (coercing to Unicode: need string or buffer, cStringIO.StringO found)
audio = MP3(self.files['mp3'].file)
# Hangs seemingly indefinitely on my test file (~800KB)
audio = MP3(self.files['mp3'].file.read())
诱变剂有什么问题,还是我做错了?
rebus 回答后
在我的ModelAdmin 类中即时修改FILE_UPLOAD_HANDLERS 设置,如下所示:
def add_view(self, request, form_url='', extra_context=None):
request.upload_handlers = [TemporaryFileUploadHandler()]
return super(TalkAdmin, self).add_view(request, form_url, extra_context)
点击提交时收到以下错误 500:
上传处理完成后,您无法设置上传处理程序。
即使我尽可能早地这样做!
另外,我不确定我要返回的对象是否有 save 方法(我查看了 dir(self.files['mp3'].file) 和 dir(self.files['mp3']))。
【问题讨论】:
标签: django django-file-upload mutagen