1

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

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

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

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

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

4

2 回答 2

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
于 2013-08-02T18:49:21.143 回答
2

最后我用这个做到了,注意我在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并让奇迹发生。

于 2013-08-03T13:12:23.980 回答