【发布时间】:2023-03-30 21:05:01
【问题描述】:
我正在尝试通过 确认页面 使用 Django 通用 DeleteView。设置按预期工作。
后来更改了业务逻辑以防止删除,如果有分配给要删除的对象的子实例,在模型中使用on_delete=models.PROTECT。
并且DeleteView已修改为以下内容:
class TerritoryDeleteView(LoginRequiredMixin, DeleteView):
template_name = ".../trty_delete.html"
model = Territory
success_url = reverse_lazy('territories_list')
# THE FOLLOWING MODIFICATION DONE:
def delete(self, request, *args, **kwargs):
self.object = self.get_object()
try:
self.object.delete()
return HttpResponseRedirect(success_url)
except ProtectedError:
error_message = "This object can't be deleted, as an Outlet is already assigned to the Territory..."
return JsonResponse(error_message, safe=False)
上述(修改后的)视图工作正常。但是,如果遇到ProtectedError,error_message 会显示在空白浏览器页面中。
如何在确认页面(模板)本身中显示error_message?
【问题讨论】:
-
你应该使用
render()函数 -
@ArakkalAbu - 谢谢。现在可以看到消息了。但是,object details(正在删除的对象的)现在从页面中丢失了。 例如,如果对象位于曼哈顿下城,则在首先执行
Delete选项时,其详细信息可用(这样做是为了便于用户理解)。现在,当应用程序遇到ProtectedError时,这些细节就完全消失了。可能是因为在异常情况下,上下文没有像正常情况下那样被传输(即在没有错误的情况下)。我应该怎么做才能始终将上下文数据保留在页面上?
标签: django error-handling django-views jsonresponse