#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.
Я надеюсь, что это каким-то образом поможет.