Как добавлять и отправлять файловые данные в составной форме react с помощью серверной части Django с вложенным JSON
Итак, у меня есть форма данных в соответствующем формате JSON
project_status: 'OPEN',
project_title: '',
project_code: '',
start_date: '',
end_date: '',
duration: '',
engagement_year: '',
financial_year: '',
project_budget: '',
domain: '',
project_type: '',
project_mou: null,
other_docs: null,
thirdAgencyDetails: {
government_body: '',
scheme_name: '',
sanctioned_budget: '',
industry_contribution: '',
government_contribution: '',
agreement: null,
sanction_letter: null,
proposal_doc: null
},
facultyDetails: [],
Я пытаюсь отправить эти данные в серверную часть Django, которая имеет следующую модель
class Project(models.Model):
user = models.CharField(max_length=15, null=True)
project_title = models.CharField(max_length=250, null=True)
project_code = models.CharField(max_length=250, null=True)
start_date = models.DateField(max_length=10, null=True, default='')
end_date = models.DateField(max_length=10, null=True, default='')
duration = models.CharField(max_length=255)
engagement_year = models.IntegerField()
financial_year = models.CharField(max_length=255)
project_budget = models.DecimalField(max_digits=10, decimal_places=2)
domain = models.CharField(max_length=250, null=True)
project_type = models.CharField(max_length=255)
project_status=models.CharField(max_length=250, blank=True)
thirdAgencyDetails = models.OneToOneField(ThirdAgencyDetail, on_delete=models.CASCADE, null=True, blank=True)
project_mou = models.FileField(upload_to='R&D_docs/', blank=True)
other_docs = models.FileField(upload_to='R&D_docs/', blank=True)
с полем "один к одному", равным
class ThirdAgencyDetail(models.Model):
government_body = models.CharField(max_length=255)
scheme_name = models.CharField(max_length=255)
sanctioned_budget = models.DecimalField(max_digits=10, decimal_places=2)
industry_contribution = models.DecimalField(max_digits=10, decimal_places=2)
government_contribution = models.DecimalField(max_digits=10, decimal_places=2)
agreement = models.FileField(upload_to='jointProject_thirdAgency_docs/',blank=True)
sanction_letter = models.FileField(upload_to='jointProject_thirdAgency_docs/',blank=True)
proposal_doc = models.FileField(upload_to='jointProject_thirdAgency_docs/',blank=True)
Я написал код для загрузки формы смотрите суть кода здесь
Я не могу добавить файлы для 'thirdAgencyDetails', поскольку это вложенный JSON-файл, аналогичный
if (formData.project_mou) {
formDataToSend.append('project_mou', formData.project_mou);
}
Что я уже пробовал?
if(formData.thirdAgencyDetails){
formDataToSend.append('agreement',formData.thirdAgencyDetails['agreement'])
}
if(formData.thirdAgencyDetails){
formDataToSend.append('agreement',formData.thirdAgencyDetails.agreement)
}
но он всегда добавляет его к корневому JSON вместо вложенного JSON, выдавая ошибку
ответ : "{"ошибка": "Project() получил неожиданные аргументы ключевого слова: "соглашение""}" responseText : "{"ошибка":"Project() получил неожиданные аргументы ключевого слова: 'соглашение'"}"
и даже
if(formData.thirdAgencyDetails){
formDataToSend.append('thirdAgencyDetails' , {
'agreement': formData.thirdAgencyDetails.agreement,
'sanction_letter' : formData.thirdAgencyDetails.sanction_letter,
'proposal_doc':formData.thirdAgencyDetails.proposal_doc
})
}
Даже пробовал это
if(formData.thirdAgencyDetails){
formDataToSend.append('thirdAgencyDetails' , JSON.stringify(formData.thirdAgencyDetails))
}
но приведенное выше просто добавляет пустой объект вместо самого объекта!!!
P.s. : Строка в коде gist работает корректно, только вставка во вложенный JSON не работает
if (formData.project_mou) {
formDataToSend.append('project_mou', formData.project_mou);
}
как это решить?