Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Django DeleteView发送错误消息?_Django_Django Views_Django Class Based Views - Fatal编程技术网

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

如何从Django DeleteView发送错误消息?,django,django-views,django-class-based-views,Django,Django Views,Django Class Based Views,假设有两种模型Parent和Child父项到子项是一对多关系 我正在为父模型创建DeleteView。在删除之前,我需要检查父项是否有子项。如果没有子项,则像往常一样删除父项模型。但如果有子项,则需要将错误消息发送到DeleteView确认页面 如何使用DeleteView实现这一点?您可以覆盖delete方法并使用 DeleteView继承。您可以在子模型中添加on_delete=PROTECTED,并覆盖视图中的delete方法以捕获ProtectedError异常。有关错误消息,请参阅Dj

假设有两种模型
Parent
Child
<代码>父项到子项是一对多关系

我正在为父模型创建DeleteView。在删除之前,我需要检查
父项
是否有
子项
。如果没有
子项
,则像往常一样删除
父项
模型。但如果有
子项
,则需要将错误消息发送到DeleteView确认页面


如何使用DeleteView实现这一点?

您可以覆盖
delete
方法并使用

DeleteView继承。您可以在子模型中添加
on_delete=PROTECTED
,并覆盖视图中的delete方法以捕获
ProtectedError
异常。有关错误消息,请参阅Django的

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