Загрузка нескольких файлов с использованием Django не работает должным образом - PullRequest
0 голосов
/ 13 марта 2020

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

views.py

def attachments(request):
    to = TravelOrder.objects.order_by('-date_filling').last()
    if request.method == 'POST':
        form = AttachmentsForm(request.POST, request.FILES)
        if form.is_valid():
            for f in request.FILES.getlist('attachment'):
                file_instance = Attachements(travel_order=to, attachment=f)
                file_instance.save()
                print('YEY')
                return redirect('attach')
    else:
        form = AttachmentsForm()
    context = {
        'form': form
    }
    return render(request, 'employee/attachments.html', context)

models.py

class TravelOrder(models.Model):
    created_by = models.CharField(max_length=255)
    start_date = models.DateField(auto_now=False)
    end_date = models.DateField(auto_now=False)
    wfp = models.CharField(max_length=255, verbose_name='Wfp Where to be charged')
    purpose_of_travel = models.CharField(max_length=255)
    region = models.ForeignKey(Region, on_delete=models.CASCADE)
    venue = models.CharField(max_length=255)
    date_filling = models.DateTimeField(auto_now_add=True)
    status = models.CharField(max_length=15)
    def __str__(self):
        return self.purpose_of_travel

class Attachements(models.Model):
    at_id = models.AutoField(primary_key=True)
    travel_order = models.ForeignKey(TravelOrder, on_delete=models.CASCADE)
    attachment = models.FileField(upload_to='attachment/')

1 Ответ

0 голосов
/ 13 марта 2020

Я думаю, что вы выполняете ретрансляцию до того, как l oop завершится.

for f in request.FILES.getlist('attachment'):
    file_instance = Attachements(travel_order=to, attachment=f)
    file_instance.save()
    print('YEY')
    return redirect('attach')

Возьмите возврат за пределы l oop, чтобы перенаправление происходило только после сохранения всех файлов. Это значит

for f in request.FILES.getlist('attachment'):
   file_instance = Attachements(travel_order=to, attachment=f)
   file_instance.save()
   print('YEY')
return redirect('attach')
...