django загружает несколько файлов, поля которых не сохраняются

#django

#django

Вопрос:

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

 def company_form(request):
    if request.POST:
        form = CompanyFrom(request.POST, request.FILES)
        files = request.FILES.getlist('Supporting_Documents')
        if form.is_valid():
             for f in files:
                 file_instance = InternationalCompany(Supporting_Documents=f)
                 file_instance.save()
           
            messages.info(request, 'Record was successfully added to the database!')
            return HttpResponseRedirect('/company_form')
    else:
        form = CompanyFrom()

    return render(request, 'company_form.html', locals()) 

 class InternationalCompany(models.Model):
    International_company_Name = models.CharField(max_length=50)
    International_company_Id = models.CharField(max_length=50)
    options = (
        ('Yes', 'Yes'),
        ('No', 'No'),
    )
    Does_it_have_a_Financial_Dealers_License = models.CharField(max_length=20, choices=options, null=True)
    Register_Office = models.TextField(max_length=500, null=True)
    Beneficial_owner = models.CharField(max_length=100, null=True)
    Beneficial_owner_id = models.FileField(upload_to='passport/pdf/',null=True)
    Supporting_Documents = models.FileField(upload_to='support_doc/pdf/', null=True)
    expire_date = models.DateField(null=True)
    BO_Phone_number = models.IntegerField(null=True)
    BO_Email_Address = models.EmailField(null=True)
    BO_Residential_Address = models.TextField(max_length=200, null=True)
    

    def __str__(self):
        return self.International_company_Name 

Ответ №1:

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

 def company_form(request):
    if request.POST:
        form = CompanyFrom(request.POST, request.FILES)
        files = request.FILES.getlist('Supporting_Documents')
        if form.is_valid():
            #add this line to save the form
            company = form.save()
            #Here you are creating a new Company object for each file
            #just with de Supporting_documents field
            for f in files:                    
                file_instance = InternationalCompany(Supporting_Documents=f)
                file_instance.save()                                      
            return HttpResponseRedirect('/company_form')
    else:
        form = CompanyFrom()

return render(request, 'company_form.html', locals())
 

Затем, если вы хотите связать файл с de company, просто сделайте это вместо этого:

 if form.is_valid():       
    company = form.save(commit=False)                
    for f in files:                    
        company.Supporting_Documents = f
    company.save()                                             
    return HttpResponseRedirect('/company_form')
 

Если вы хотите, чтобы у компании было несколько файлов, вам нужно изменить свой подход, потому что ваше поле supporting_documents принимает только один. Возможно, с отношением M2M.

Я надеюсь, что это каким-то образом поможет.