Handle PROTECT ошибка в Django DeleteView


Я использую Django DeleteView для удаления элементов в моей базе данных. Я использую отдельный шаблон, чтобы показать сообщение подтверждения удаления, но когда я нажимаю кнопку Да, я получаю ProtectedError, так как таблица клиентов связана с таблицей счетов. Поэтому я хочу обработать ProtectedError и дать пользователю другое сообщение в том же шаблоне.

Вот код, который я использовал для выполнения удаления:

class Customer(DeleteView):
    #Delete Customers
    model = Customer
    template_name = 'project_templates/delete_customer.html'

    def get_success_url(self):
        return reverse('inactive_customers')
Было бы очень здорово, если бы кто-нибудь предложил мне способ справиться с этой ситуацией.
1 2

1 ответ:

Вы должны быть в состоянии поймать исключение. Когда вы смотрите на DeletionMixin:

Https://github.com/django/django/blob/master/django/views/generic/edit.py#L256

Можно переопределить метод post и получить что-то вроде:

def post(self, request, *args, **kwargs):
    try:
        return self.delete(request, *args, **kwargs)
    except ProtectedError:
        # render the template with your message in the context
        # or you can use the messages framework to send the message

Надеюсь, это поможет.