Django Загрузить несколько файлов - PullRequest
0 голосов
/ 20 мая 2019

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

Я попробовал следующий метод

Несколько файлов загружено через другие_файлы

forms.py

from django import forms
from categories.models import Categories
from .models import Process

class ProcessingForm(forms.ModelForm):
    files = forms.ModelChoiceField(queryset=Categories.objects.all())
    class Meta:
        model = Process
        fields = ('category', 'files', 'lookup_files', 'other_files')

models.py

from django.db import models

class Process(models.Model):
    category = models.CharField(max_length=25, choices=CATEGORIES, null=True, 
              blank=True)
    files = models.CharField(max_length=50, null=True, blank=True)
    lookup_files = models.FileField(upload_to='processing/%Y/%m/%d/Lookup', 
    verbose_name=('Lookup File [For Tagging]'), validators=
     [validate_file_extension])
    other_files =models.FileField(upload_to='processing/%Y/%m/%d/other_files', 
    null=True, blank=True)

views.py

from django.shortcuts import render, redirect
from categories.models import Categories
from django.contrib import messages
from .models import Process

def process(request):
    if request.method == 'POST':
        form = ProcessingForm(request.POST, request.FILES)        
        # print(form)
        if form.is_valid():
            category = form.cleaned_data['category']
            files = form.cleaned_data['files']
            lookup_files = request.FILES['lookup_files']
            other_files =  request.FILES.getlist('other_files')
            print(len(other_files))
            # file_list = []
            for oth in other_files:
                print(oth)
                # file_list.append(oth)
                form = Process(category=category, files=files, 
                       lookup_files=lookup_files, other_files=oth)
                form.save()
            messages.success(request, 'File uploaded succcessfully')
            return redirect('process')
        else:
            print("Form is not valid")
            messages.warning(request, 'File extension is not valid')
            return redirect('process')

    else:
        form = ProcessingForm()
        return render(request, 'process/process.html', {'form':form})

Нужны все эти строки в один ряд enter image description here

1 Ответ

0 голосов
/ 20 мая 2019

Вы должны изменить свою стратегию (это будет лучший способ, imho). Вам нужна еще одна таблица только для файлов и связи между таблицей процессов и таблицей файлов. Используйте отношение ForeignKey для этого. У вас будет один процесс и много файлов (OneToMany).

class OtherFile(models.Model):
    other_file = models.FileField(upload_to='processing/%Y/%m/%d/Lookup', verbose_name=('Lookup File [For Tagging]'), validators=[validate_file_extension])
    process = models.ForeignKey(to=Process, on_delete=models.PROTECT) # this is process_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...