我现在已经在文件验证方面苦苦挣扎了一段时间,但我认为我正走在正确的轨道上。我试图验证音频文件'声音'当我发布一个表格。每当我尝试提交表单时,我都会得到'InMemoryUploadedFile' object has no attribute 'content'
。问题似乎发生在form.is_valid()。到目前为止,我的形式是:
class PostForm(forms.ModelForm):
def clean_sound(self):
file = self.cleaned_data.get('sound',False)
if file:
if not file.content-type in ["audio/mpeg","audio/mp3", "audio/wav"]:
raise ValidationError("Content-Type is not mpeg")
if not os.path.splitext(file.name)[1] in [".mp3",".wav"]:
raise ValidationError("Doesn't have proper extension")
return file
else:
raise ValidationError("Couldn't read uploaded file")
class Meta:
model = Places
fields = [
'usersave',
'title',
'longitude',
'latitude',
'sound',
]
在视图中:
@login_required(login_url='/accounts/login/')
def post_create(request):
form= PostForm(request.POST or None, request.FILES or None)
if form.is_valid():
# handle_uploaded_file(request.FILES['sound'])
instance = form.save(commit=False)
instance.save()
messages.success(request, 'Successfully Created')
return HttpResponseRedirect('/')
context= {
'form': form,
}
return render(request, 'location/post_form.html',context,)
我不确定' InMemoryUploadedFile'错误是,并且非常感谢任何可以指出我正确方向的建议!
答案 0 :(得分:1)
想发表评论,但还没有足够的声誉。
如果您查看source code,您似乎必须首先致电open()
才能访问其内容。类实例本身file = self.cleaned_data.get('sound', False)
没有错误中所述的content
属性。你可以尝试先打开文件吗?
答案 1 :(得分:1)
试试这个
file = self.cleaned_data.get(' sound')
和
您是否尝试上传相同的音频文件并收到错误消息?或者你也尝试过其他音频文件?