如何从 Django DeleteView 发送错误消息?

How to send error message from Django DeleteView?

假设有两个模型 ParentChildParentchild 是一对多关系。

我正在为父模型创建 DeleteView。在删除之前我需要检查 Parent 是否有 Children。如果没有 Children,那么 Parent 模型将照常删除。但是如果有 Children 那么我需要发送错误消息到 DeleteView 确认页面。

如何使用 DeleteView 实现此目的?

您可以覆盖 delete 方法并使用 Django's message framework

设置消息
from django.contrib import messages

class DeletePArent(DeleteView):

   # ...

   def delete(self, request, *args, **args):
       object = self.get_object()
       if object.chidlren.count() > 0:
           messages.add_message(request, messages.ERROR, "Can't be deleted, has childern")
           return redirect('url-of-your-choice')
       return super().delete(request, *args, **kwargs)  

DeleteView继承DeletionMixin. What you can do is add on_delete=PROTECTED in your child model and override the delete method in your view to catch a ProtectedError exception. For the error message, see Django's message framework.

models.py:

class Child():
    #...
    myParent = models.ForeignKey(Parent, on_delete=PROTECTED)

views.py:

from django.db.models import ProtectedError

#...

class ParentDelete(DeleteView):
    #...
    def delete(self, request, *args, **kwargs):
        """
        Call the delete() method on the fetched object and then redirect to the
        success URL. If the object is protected, send an error message.
        """
        self.object = self.get_object()
        success_url = self.get_success_url()

        try:
            self.object.delete()
        except ProtectedError:
            messages.add_message(request, messages.ERROR, 'Can not delete: this parent has a child!')
            return # The url of the delete view (or whatever you want)

        return HttpResponseRedirect(success_url)