在Django ModelForm中是否可以将Filefield保留为空?

时间:2019-05-10 17:44:23

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

我想制作一个可以上传少量文件的应用程序,只需要一个文件-您有义务选择一个文件,而其他文件是可选的。

如果我没有选择所有得到的文件:/ 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文件。 我的代码充满了使它起作用的怪异尝试-这些是我的最新更改,当解决此问题的各种逻辑方法都失败时... 谢谢您能给我的所有帮助;)

0 个答案:

没有答案