首页 > 解决方案 > 使用 Django 的多文件上传无法按预期工作

问题描述

我在上传多个文件时遇到问题。上传的文件是pdf,只保存一个。

视图.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)

模型.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/')

标签: djangodjango-modelsdjango-formsdjango-views

解决方案


我认为您在循环结束之前返回。

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

将返回外部循环,以便重定向仅在保存所有文件后发生。这意味着

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

推荐阅读