Django文件验证错误

问题描述:

我一直在努力与文件验证一段时间,但我认为我在正确的轨道上。我在发布表单时试图验证音频文件'声音'。每当我尝试提交表单时,我都会收到一个'InMemoryUploadedFile' object has no attribute 'content'。这个问题似乎发生在form.is_valid()。到目前为止,我有形式:Django文件验证错误

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”的错误是什么,以及将非常感激,可以点我的任何意见正确的方向!

想评论,但没有足够的声望呢。

如果你看看source code看来你必须先拨打open()才能访问它的内容。类实例本身file = self.cleaned_data.get('sound', False)没有如错误中所述的content属性。你可以尝试先打开文件吗?

试试这个

文件= self.cleaned_data.get( '声音')

你要上传的相同的音频文件,并收到错误?或者您也尝试过使用其他音频文件?