2013-08-02 68 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,讓魔術就會發生。