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, а не на страницу изменения объекта.
Вот мои вопросы:
- Правильно ли я делаю (так как я новичок в django)?
- Если подход правильный, то как я могу его исправить?
Проблема заключается в том, как вы построили 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])