我正在尝试上传文件,但无法这样做, 我的功能在视野中,
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>
按下提交按钮后,我在媒体位置看不到任何文档。 我做错了什么或遗失了什么?
提前致谢。
答案 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
!