2016-12-29 63 views
1

朋友你好我需要幫助,Django的 - on_delete = models.PROTECT不能正常工作

我在蟒蛇新的Django

這一次,我建立我的應用程序,我嘗試使用on_delete=models.PROTECT它工作正常,但我想要替換我的模板ProtectedError的任何消息。

我該怎麼做?

我有這樣的事情:

grupos模式

class grupos(models.Model): 
    nombre_grupo = models.CharField(max_length=100) 
    nombre_puerto = models.ForeignKey(puerto, on_delete=models.PROTECT) 


    def __unicode__(self): 
     return self.nombre_grupo 

    def __str__(self): 
     return self.nombre_grupo 

正如你可以看到有一個dependecy,在那裏,如果我有一個puerto創建它不會讓我刪除puerto這罰款,這是工作,但我得到的模板錯誤,我想要一個味精而不是。

這裏是我的波多黎各刪除視圖:

波多黎各views.py

def delete(request, id): 
    # I want the message here..... (such as messages.warning or something) 
    note = get_object_or_404(puerto, pk=id).delete() 
    messages.error(request, 'This puerto has been deleted.') 
    return redirect('/puertot') 

例如,我想是這樣messages.warning(request, 'You can't delete this because it's being used by grupos')

模板錯誤:

ProtectedError at /delete/59/ ("Cannot delete some instances of model 'puerto' because they are referenced through a protected foreign key: 'grupos.nombre_puerto'", ]>)

我試圖弄清楚如何管理這個,但沒有線索......

我該怎麼做?

謝謝......!

+0

更新了我的答案。請立即檢查並告訴我ProtectedError異常現在是否得到更好的處理? –

+0

是的!按預期工作,謝謝! @PrakharTrivedi – User100696

回答

2

使用嘗試/除了異常問題。

from django.db.models import ProtectedError 

def delete(request, id): 

    try : 
     note = get_object_or_404(puerto, pk=id).delete() 
     messages.error(request, 'This puerto has been deleted.') 

    except ProtectedError: 
     messages.warning(request, "You can't delete this because it's being used by grupos") 

    return redirect('/puertot') 
+0

不建議一攬子捕獲所有例外情況。相反,他應該按照'ProtectedError'之外的方法做一些事情。 –

+1

按預期工作,謝謝! – User100696

+0

@ChuckLoganLim我明白你的觀點,我早些時候的回答是隻有那個,但後來我改變了它更加方便。現在更新它。 –