Возможно ли в django ModelForm оставить Filefield пустым? - PullRequest
0 голосов
/ 10 мая 2019

Я хочу создать приложение, в которое вы можете загружать несколько файлов, где требуется только один - вы обязаны выбрать один файл, но остальные необязательны.

Если я не выбираю все файлы, которые я получаю: MultiValueDictKeyError at / fpFilterRun / Вначале я использовал 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. Мой код полон моих странных попыток заставить его работать - это мои последние изменения, когда каждый логический способ решения этой проблемы не удался ... Спасибо за всю помощь, которую вы можете оказать мне;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...