2013-08-02 37 views
1

PROTECT我在我的模型中定义的on_delete约束这样的:抬起默认的错误on_delete和Django

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

当我删除与一个客户的订单,将引发一个错误,但只是提出一个500错误搭配:

“无法删除‘Cliente’模式的某些情况下,因为它们是通过一个受保护的外键引用:‘Pedido.cliente’”

和一个完整的常见信息,我想要的是,如果我可以在发生这种情况时设置自定义消息错误,任何人都知道如何做到这一点?

回答

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 
+0

谢谢,你给了我解决方案的想法:) – Enot

0

最后,我这个做了,请注意我用一个​​这件事:

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,让魔术就会发生。