在 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')

如果有人能向我建议一种处理这种情况的方法,那就太好了。

您应该能够捕获异常。当你看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

希望这有帮助。

我遇到了同样的问题,覆盖 delete() 方法在 Django 3.2 上对我有用。我使用消息框架来显示错误消息 - 这需要额外的设置(请参阅 https://docs.djangoproject.com/en/dev/ref/contrib/messages/):

from django.db.models import ProtectedError
from django.contrib import messages
.
.
.
def delete(self, request, *args, **kwargs):
    self.object = self.get_object()
    success_url = self.get_success_url()
    try:
        self.object.delete()
    except ProtectedError:
        messages.error(request, "custom error message")
    finally:
        return redirect(success_url)

最新更新