使用Django引发on_delete PROTECT的默认错误

时间:2013-08-02 16:59:50

标签: django error-handling constraints

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

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

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

  

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

和一个完整的常见信息,如果我能在设置自定义消息时出现错误,那么有人知道如何做到这一点吗?

2 个答案:

答案 0 :(得分:2)

您可以在视图中处理此问题:

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

答案 1 :(得分:0)

最后我用这个做了,注意我在这个问题上使用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并让魔法发生。