Редактирование форм в FormWizard для сохранения текущего экземпляра вместо создания нового экземпляра - PullRequest
0 голосов
/ 15 октября 2018

views.py

    def get_form_initial(self, step):
    if 'pk' in self.kwargs:
        return {}
    return self.initial_dict.get(step, {})

def get_form_instance(self, step):
    if 'pk' in self.kwargs:
        pk = self.kwargs['pk']
        resume = Resume.objects.get(id=pk)

        if step == 'resumes':
            return resume

        if step == 'work_experience':
            work_experience = resume.workexperience_set.all()
            return work_experience

        if step == 'certifications':
            certification = resume.certification_set.all()
            return certification

        if step == 'education':
            education = resume.education_set.all()
            return education

        if step == 'skills':
            skill = resume.skill_set.all()
            return skill

        if step == 'languages':
            language = resume.language_set.all()
            return language
    return None

Привет!У меня есть мастер форм, который работает с разными моделями для каждого шага.У меня есть код выше, чтобы установить начальные данные для каждого шага мастера формы.

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

  1. Как мне получить текущий экземпляр / идентификатор модели вместо создания нового?

  2. Почему код в get_form_instance в разделе "if 'pk' в self.kwargs 'выполняется, даже если я не передаю PK в kwargs через URL?

В методе done Iсделать что-то вроде этого:

views.py

work_experience_form_data = self.get_cleaned_data_for_step('work_experience')
for work_experience in work_experience_form_data:
    WorkExperience.objects.create(position=work_experience.get('position'),
                                  company=work_experience.get('company'),
                                  city=work_experience.get('city'),
                                  start_date=work_experience.get('start_date'),
                                  end_date=work_experience.get('end_date'),
                                  achievements=work_experience.get('achievements'),
                                  resume=resume, )
...