Django文件上传错误

时间:2017-10-04 04:38:15

标签: django django-models django-forms django-views

我正在尝试上传文件,但无法这样做, 我的功能在视野中,

def user_in(request):
if not request.user.is_authenticated:
return render(request, 'accounts/logout.html')
else:
if request.method == 'POST':
form_new = Fileupload(request.POST, request.FILES )
if form_new.is_valid():
return redirect('in')
else:
form_new = Fileupload()
return render(request, 'accounts/in.html', {'form_new': form_new})

我的表格,

class Fileupload(forms.Form):
BrowseFile=forms.FileField()
class Meta:
model=User

和我的模板,

<form action="." method="POST" enctype="multipart/form-data" >
<h3>Welcome to DropBox<br><br></h3>
{% csrf_token %}
{{form_new.as_p}}
<p><input type="submit" value="Save" ></p>
<br>
<a href="{% url 'logout' %}">Logout</a>
{%else%}
<p>You must login first</p>
<a href="{% url 'login' %}">Logout</a>
{% endif %}
<br>
</form>

按下提交按钮后,我在媒体位置看不到任何文档。 我做错了什么或遗失了什么?

提前致谢。

1 个答案:

答案 0 :(得分:2)

首先,如果您想在forms.ModelForm中使用forms.Form,则必须使用model=....而不是class Meta:

所以我会这样改变......

class Fileupload(forms.ModelForm):
    class Meta:
        model=User # I guess BrowseFile field may be FileField()

如果您的模型User是这样的,那么您不必在Fileupload表单中创建BrowseFile字段。

class User(...):
    BrowseFile = models.FileField()

所以,让我们走得更远......

def user_in(request):
    if not request.user.is_authenticated:
        return render(request, 'accounts/logout.html')
    else:
        if request.method == 'POST':
            form_new = Fileupload(request.POST, request.FILES )
            if form_new.is_valid():
                return redirect('in')
        else:
            form_new = Fileupload()
        return render(request, 'accounts/in.html', {'form_new': form_new})

views中,您无法保存自己在POST中获得的内容。

所以让我们改变它......

def user_in(request):
    if not request.user.is_authenticated:
        return render(request, 'accounts/logout.html')
    else:
        if request.method == 'POST':
            form_new = Fileupload(request.POST, request.FILES )
            if form_new.is_valid():
                form.save() # if you want it, you have to use forms.ModelForm 
                return redirect('in')
        else:
            form_new = Fileupload()
        return render(request, 'accounts/in.html', {'form_new': form_new})

现在,您可以在某处上传文件夹中查看已上传的文件。

  

注意:您必须在MEDIA_ROOT中设置上传文件位置(MEDIA_URL)和settings.py