Передача своего сообщения пользователю при обработке исключения ProtectedError в Django
Нужно выдавать пользователю сообщение об ошибке на русском языке, чтобы до него дошло, что именно он творит не так.
В модели есть такое определение:
class Furniture(models.Model):
#...
tex = models.ForeignKey(Tex, on_delete=PROTECT, default=1)
Соответственно, ошибка возникает при наличии связанных объектов в другой таблице. Нашёл вот такое решение. Меняем представление DeleteView следующим образом:
class texDeleteView(DeleteView):
model = Tex
success_url = '/databank/textile/'
template_name = 'databank/textile/texDelete.html'
def delete(self, request, *args, **kwargs):
try:
return super().delete(request, *args, **kwargs)
except ProtectedError:
self.object = self.get_object()
context = self.get_context_data(
object=self.object,
error='Удаление невозможно т.к. существуют связанные объекты'
)
return self.render_to_response(context)
Меняем шаблон следующим образом:
<form method="post">
{% csrf_token %}
{% if error %}
{{ error }}
{% else %}
<p><center>Вы уверены, что хотите удалить <strong>{{ object.tex_cat }} "{{ object.name }}"</strong>?<br><br>
<button class="btn btn-danger" type="submit">Удалить</button>
<a href="{% url 'textile' %}" <button class="btn btn-warning">Отмена</button></a>
</center>
{% endif %}
</form>
По-идее всё должно работать, но не работает. Как сервер выдавал стандартный ответ, так и продолжает. Где у меня ошибка? (Я совсем начинающий) Желательно, ещё в сообщении выдавать список связанных объектов из-за которых невозможно удаление.
попробуйте except ProtectedError:
поменять на except:
также можете проверить через тот же print срабатывает ли вообще метод def delete(self, request, *args, **kwargs):