2016-12-29 79 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我明白你的观点,我早些时候的回答是只有那个,但后来我改变了它更加方便。现在更新它。 –