Django文件验证错误

时间:2017-05-04 03:49:37

标签: python django forms validation

我现在已经在文件验证方面苦苦挣扎了一段时间,但我认为我正走在正确的轨道上。我试图验证音频文件'声音'当我发布一个表格。每当我尝试提交表单时,我都会得到'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'错误是,并且非常感谢任何可以指出我正确方向的建议!

2 个答案:

答案 0 :(得分:1)

想发表评论,但还没有足够的声誉。

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

答案 1 :(得分:1)

试试这个

file = self.cleaned_data.get(' sound')

您是否尝试上传相同的音频文件并收到错误消息?或者你也尝试过其他音频文件?