Я работаю над веб-сайтом, на котором пользователи будут загружать резюме, и будет запущен скрипт анализатора резюме, чтобы получить навыки и сохранить навыки в профиле пользователя. Мне удалось получить навыки до сохранения формы, но теперь я не могу сохранить извлеченные навыки. Любой, кто может помочь с этой проблемой, будет высоко оценен. Вот мой файл представлений
def homepage(request):
if request.method == 'POST':
# Resume.objects.all().delete()
file_form = UploadResumeModelForm(request.POST, request.FILES, instance=request.user.profile)
files = request.FILES.getlist('resume')
resumes_data = []
if file_form.is_valid():
for file in files:
try:
# saving the file
# resume = Profile(resume=file)
resume = file_form.cleaned_data['resume']
# resume.save()
# resume = profile_form.cleaned_data['resume']
# print(file.temporary_file_path())
# extracting resume entities
# parser = ResumeParser(os.path.join(settings.MEDIA_ROOT, resume.resume.name))
parser = ResumeParser(file.temporary_file_path())
# extracting resume entities
# parser = ResumeParser(os.path.join(settings.MEDIA_ROOT, resume.resume.name))
data = parser.get_extracted_data()
resumes_data.append(data)
resume.name = data.get('name')
resume.email = data.get('email')
resume.mobile_number = data.get('mobile_number')
if data.get('degree') is not None:
resume.education = ', '.join(data.get('degree'))
else:
resume.education = None
resume.company_names = data.get('company_names')
resume.college_name = data.get('college_name')
resume.designation = data.get('designation')
resume.total_experience = data.get('total_experience')
if data.get('skills') is not None:
resume.skills = ', '.join(data.get('skills'))
else:
resume.skills = None
if data.get('experience') is not None:
resume.experience = ', '.join(data.get('experience'))
else:
resume.experience = None
# import pdb; pdb.set_trace()
resume.save()
except IntegrityError:
messages.warning(request, 'Duplicate resume found:', file.name)
return redirect('homepage')
resumes = Profile.objects.all()
messages.success(request, 'Resumes uploaded!')
context = {
'resumes': resumes,
}
file_form.save()
return render(request, 'authentication/resume.html', context)
else:
form = UploadResumeModelForm()
return render(request, 'authentication/resume.html', {'form': form})
А вот и мои модели:
# Extending User Model Using a One-To-One Link
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
avatar = models.ImageField(default='default.jpg', upload_to='profile_images')
bio = models.TextField()
resume = models.FileField('Upload Resumes', upload_to='resumes/', null=True, blank=True)
name = models.CharField('Name', max_length=255, null=True, blank=True)
email = models.CharField('Email', max_length=255, null=True, blank=True)
mobile_number = models.CharField('Mobile Number', max_length=255, null=True, blank=True)
education = models.CharField('Education', max_length=255, null=True, blank=True)
skills = models.CharField('Skills', max_length=1000, null=True, blank=True)
company_name = models.CharField('Company Name', max_length=1000, null=True, blank=True)
college_name = models.CharField('College Name', max_length=1000, null=True, blank=True)
designation = models.CharField('Designation', max_length=1000, null=True, blank=True)
experience = models.CharField('Experience', max_length=1000, null=True, blank=True)
total_experience = models.CharField('Total Experience (in Years)', max_length=1000, null=True, blank=True)
def __str__(self):
return self.user.username
Я попытался выполнить его шаг за шагом с помощью pdb, но когда дело доходит до сохранения, я получаю сообщение об ошибке. Вот некоторые из ошибокНекоторые ошибки, которые я получаю в pdb
AttributeError: объект «TemporaryUploadedFile» не имеет атрибута «сохранить»
Вы разрешаете подавать несколько резюме. Ожидаете ли вы, что пользователь отправит несколько резюме, или вы собираетесь создать новый профиль пользователя на основе каждого резюме.
Каждый пользователь будет отправлять личное резюме. Так же, как изображение профиля
Причина вашей ошибки в том, что когда вы просматриваете файлы, представленные в форме резюме, вы пытаетесь сохранить поле резюме (помните, resume = file_form.cleaned_data['resume']
). Предположительно, вы хотите сохранить объект профиля
Во всех тех строках, где вы добавляете вещи для возобновления из проанализированного файла резюме, например
resume.name = data.get('name')
просто замените их на
file_form.instance.name = data.get('name')
а потом
file_form.save()
в конце.
Кроме того, похоже, что вам не нужно, чтобы пользователь мог отправлять несколько резюме. Вероятно, вам также не нужно перебирать каждый файл в резюме.
Вы можете опубликовать ошибку, которую вы получаете?