Django: Перенаправление на страницу изменения объекта (администратора) при переопределении save_related

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

    def save_related(self, request, form, formsets, change):
        try:
            cleaned_data = form.cleaned_data
            if cleaned_data['file_field']:
                DEFAULT_COLUMN_INDEX = 0
                try:
                    # read file logic here that might raise an error
                    return super().save_related(request, form, formsets, change)
                except ValidationError as e:
                    messages.error(request, f"Error while proccessing data: {str(e)}")
                    redirection_url = reverse('admin:mymodel_change', args=[form.instance.id])
                    return HttpResponseRedirect(redirection_url)
        except TimeoutError as e:
            messages.error(request, f"Timeout in uploading file: {str(e)}")
            redirection_url = reverse('admin:mymodel_change', args=[form.instance.id])
            return HttpResponseRedirect(redirection_url)

Обратите внимание, что я не могу просто поднять ошибку, потому что она установлена на ответ 500 из-за других частей проекта (долгая история... я просто не могу их изменить!)

Вот моя проблема: Этот код перенаправляет на страницу администрирования mymodel, а не на страницу изменения объекта.

Вот мои вопросы:

  1. Правильно ли я делаю (так как я новичок в django)?
  2. Если подход правильный, то как я могу его исправить?

Проблема заключается в том, как вы построили URL для перенаправления.

Вместо reverse('admin:mymodel_change', args=[form.instance.id]) следует использовать reverse('admin:yourappname_yourmodelname_change', args=[form.instance.id]), где yourappname - имя вашего приложения Django, а yourmodelname - имя вашей модели, так что:

redirection_url = reverse('admin:yourappname_mymodel_change', args=[form.instance.id])
Вернуться на верх