使用 Django 引发默认错误 on_delete PROTECT

Posted

技术标签:

【中文标题】使用 Django 引发默认错误 on_delete PROTECT【英文标题】:Raise default error on_delete PROTECT with Django 【发布时间】:2013-08-04 01:08:25 【问题描述】:

我在我的模型中定义了一个on_delete 约束,如下所示:

cliente = models.ForeignKey(Cliente,related_name="cliente",on_delete=models.PROTECT)

当我删除与客户相关的订单时,它会引发错误,但只会引发 500 错误:

“无法删除模型 'Cliente' 的某些实例,因为它们是通过受保护的外键引用的:'Pedido.cliente'”

还有一个完整的通用信息,如果我可以在发生这种情况时设置自定义消息错误,我想要什么,有人知道该怎么做吗?

【问题讨论】:

【参考方案1】:

最后我做到了,注意我使用DeleteView处理这个问题:

def delete(self, request, *args, **kwargs):
    self.object = self.get_object()
    try:
        self.object.delete()
        data = 'success':'ok'
    except ProtectedError:
        data = 'success':'violation_protected'
    return HttpResponse(json.dumps(data),mimetype="application/json")

只需导入from django.db.models.deletion import ProtectedError,让奇迹发生。

【讨论】:

如何在响应中显示导致on_delete 错误的foreignkey 我收到错误:__init__() got an unexpected keyword argument 'mimetype'。如何解决这个问题?【参考方案2】:

你可以在你的视图中处理这个:

if obj.cliente_id:
    error = "Can not delete this entry"
    # and show this error in the template
else:
    # delete the entry, or continue with delete view

【讨论】:

谢谢,你给了我解决方案的想法 :) 如何在响应中显示导致on_delete 错误的foreignkey

以上是关于使用 Django 引发默认错误 on_delete PROTECT的主要内容,如果未能解决你的问题,请参考以下文章

Django2.2中Xadmin错误集

Django学习之关系表介绍及使用

Django2.0 models中的on_delete参数

django数据模型on_delete, db_constraint的使用

Django 中创建Model时报以下错误: TypeError: init() missing 1 required positional argument: ‘on_delete’

Django --- 基表 断关系 related_name on_delete