Как сохранить данные в пользовательских моделях при использовании парсера резюме в django

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

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

Вы можете опубликовать ошибку, которую вы получаете?

pzutils 27.11.2022 23:55

AttributeError: объект «TemporaryUploadedFile» не имеет атрибута «сохранить»

KipronoKirui 28.11.2022 00:11

Вы разрешаете подавать несколько резюме. Ожидаете ли вы, что пользователь отправит несколько резюме, или вы собираетесь создать новый профиль пользователя на основе каждого резюме.

SamSparx 28.11.2022 00:41

Каждый пользователь будет отправлять личное резюме. Так же, как изображение профиля

KipronoKirui 28.11.2022 00:57
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
143
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Причина вашей ошибки в том, что когда вы просматриваете файлы, представленные в форме резюме, вы пытаетесь сохранить поле резюме (помните, resume = file_form.cleaned_data['resume']). Предположительно, вы хотите сохранить объект профиля

Во всех тех строках, где вы добавляете вещи для возобновления из проанализированного файла резюме, например

 resume.name = data.get('name')

просто замените их на

file_form.instance.name = data.get('name')

а потом

file_form.save() 

в конце.

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

Другие вопросы по теме