如何解决Django 上传文件夹始终为空此字段为必填问题
我想将文件夹上传到我的应用程序,但在服务器端,request.FILES 集合始终为空。
也form.is_valid 评估为假
这个问题的解决方案似乎是添加 enctype="multipart/form-data" 但我已经添加了它,但它不起作用。 如此处所述SO TOPIC ABOUT THIS
在浏览器中,按提交后,我也会收到“此字段是必需的”,是的,我选择了一个目录。
这里是我的相关代码
model.py
# Create your models here.
class Datasets(models.Model):
dataset_name = models.CharField(max_length=100,blank=True,null=True)
description = models.CharField(max_length=1000,null=True)
share_with = models.ManyToManyField(User)
uploaded_by = models.CharField(max_length=1000,null=True)
upVotes = models.IntegerField(null=False,default=0)
downVotes = models.IntegerField(null=False,default=0)
created_at = models.DateTimeField(auto_Now_add=True)
updated_at = models.DateTimeField(auto_Now=True)
datafiles = models.FileField(blank=True,null=True)
form.py
class UploadDatasetForm(forms.Form):
dataset_name = forms.CharField(
max_length=1000,widget=forms.TextInput(attrs={'class': 'form-control'}))
description = forms.CharField(
max_length=1000,widget=forms.TextInput(attrs={'class': 'form-control'}))
share_with = forms.MultipleChoiceField(
choices=tuple(UserProfile.objects.values_list('id','full_name')),widget=forms.CheckBoxSelectMultiple,)
datafiles = forms.FileField(widget=forms.ClearableFileInput(
attrs={
'multiple': True,'webkitdirectory': True,'directory': True,}))
模板
{% block content %}
<h2>Register Here</h2>
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Register</button>
</form>
view.py
@login_required
def upload_dataset(request):
print(request.user)
form = UploadDatasetForm()
if request.method == "POST":
print('Receiving a post request')
form = UploadDatasetForm(request.POST,request.FILES)
print(request.FILES)
if form.is_valid():
print("The form is valid")
print(form.cleaned_data)
dataset_name = form.cleaned_data['dataset_name']
description = form.cleaned_data['description']
datafiles = form.cleaned_data['datafiles']
share_with = form.cleaned_data['share_with']
users_to_share_with = set()
print(datafiles)
instance = Datasets.objects.create(
uploaded_by=request.user,dataset_name=dataset_name,description=description,datafiles = datafiles,upVotes=0,downVotes=0,)
for i in share_with:
instance.share_with.add(i)
return redirect("public:data")
print("The Dataset has been uploaded")
context = {"form": form}
return render(request,"upload_dataset.html",context)
{% endblock %}
我收到消息 Receiving a post request 但它不会进入 form.is_valid
按下提交按钮后的输出是
System check identified no issues (0 silenced).
July 25,2021 - 11:42:53
Django version 3.2.3,using settings 'platform_oliveoils.settings'
Starting development server at http://0.0.0.0:40/
Quit the server with CONTROL-C.
Max
Receiving a post request
<MultiValueDict: {}>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。