我想制作一个可以上传少量文件的应用程序,只需要一个文件-您有义务选择一个文件,而其他文件是可选的。
如果我没有选择所有得到的文件:/ fpFilterRun /中的MultiValueDictKeyError 最初,我使用Form,现在切换到ModelForm,尝试检查fileFields是否为空,并仔细研究了整个堆栈,但没有任何帮助。
models.py
class FPFilter(models.Model):
QueryName = models.CharField(max_length=25)
DCAfile = models.FileField()
MSAfile = models.FileField(blank=True, null=True)
SSfile = models.FileField(blank=True, null=True)
RSAfile = models.FileField(blank=True, null=True
forms.py
class FPFilterForm(ModelForm):
class Meta:
model = FPFilter
fields = ['QueryName', 'DCAfile', 'MSAfile', 'SSfile', 'RSAfile']
labels = {
'QueryName': 'Query name:',
'DCAfile': 'DCA file:',
'MSAfile': 'MSA file:',
'SSfile': 'Secondary Structure file:',
'RSAfile': 'Relative Solvent Accessibility file:',
}
views.py
def fpFilterRun(request):
if request.method == 'POST':
fpfilter_form = FPFilterForm(request.POST, request.FILES)
if fpfilter_form.is_valid():
query_name = request.POST['QueryName']
DCADict = save_file(request.FILES["DCAfile"], saveDir)
if request.FILES['MSAfile'] is not 'u''':
MSADict = save_file(request.FILES['MSAfile'], saveDir)
MSAPath = MSADict['filePath']
else:
MSAPath = 'empty'
if bool(request.FILES['SSfile']) is False:
SSDict = save_file(request.FILES['SSfile'], saveDir)
SSPath = SSDict['filePath']
else:
SSPath = 'empty'
if request.FILES['RSAfile'] is not None:
RSADict = save_file(request.FILES['RSAfile'], saveDir)
RSAPath = RSADict['filePath']
else:
RSAPath = 'empty'
else:
fpfilter_form = FPFilterForm()
return render(
request,
'comprec/FPFilterInput.html',
{'title': "FP Filter input", 'fpfilter_form': fpfilter_form})
我希望用户始终上传DCAfile。如果用户希望他也可以上传MSA,SS或RSA文件。 我的代码充满了使它起作用的怪异尝试-这些是我的最新更改,当解决此问题的各种逻辑方法都失败时... 谢谢您能给我的所有帮助;)