Обработка ситуации, когда у Django UpdateView нет данных для обновления

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

Мой пользователь

может продолжить заполнение данных при повторном посещении.

Каждый CreateView связан со следующим CreateView с помощью success_urls. Таким образом, каждый UpdateView переходит к следующему UpdateView в серии представлений, используя success_urls.

Таким образом, когда пользователь обновляет данные в форме и нажимает кнопку «Далее», он может попасть в форму, в которой нет данных для обновления, поскольку он не заполнил их при предыдущем посещении.

Поэтому функция get_object() возвращает ошибку, так как в базе данных нет данных для этой формы проекта.

Как справиться с этой ситуацией?

class UserUseUpdateView(UpdateView):
    model = UserUse
    form_class = UserUseForm
    template_name = 'user_use.html'
    success_url = reverse_lazy('controller', kwargs={'step': 10, 'action': 'update'})

    def get_object(self, queryset=None):
        try:
            project_instance = get_project(self.request)
            return UserUse.objects.get(project=project_instance)
        except Project.DoesNotExist:
            return redirect('step-9-create')
            # raise Http404(f'Project not found.')
        except UserUse.DoesNotExist:
            raise Http404(f'UserUse for project not found.')

    def form_valid(self, form):
        try:
            existing_project = get_project(request=self.request)
            if existing_project is not None:
                form.instance.project = existing_project
                log.info(f'Saving UserUse with project ID {existing_project.id} for user {self.request.user}')
                return super().form_valid(form)
            else:
                error_msg = f"Existing project with SESSION_PROJECT_ID {self.request.session.get(SESSION_PROJECT_ID, None)} not found"
                log.error(f'request user : {self.request.user} {error_msg}')
                messages.error(self.request, 'Existing project not found.')
                return redirect('step-1-create')

        except PermissionDenied as e:
            log.error(f'request user : {self.request.user} does not have permission to modify this project | {e}')
            messages.error(self.request, 'You do not have permission to modify this project.')
            return redirect('projects')

        except Exception as e:
            log.error(f'request user : {self.request.user} Unexpected error occurred | {e}')
            messages.error(self.request, 'An unexpected error occurred.')
            return redirect('projects')

    def form_invalid(self, form):
        log.error(f'request user : {self.request.user} Form invalid: {form.errors}')
        messages.error(self.request, 'There were errors in your form submission.')
        return super().form_invalid(form)
Вернуться на верх