【问题标题】:Django - on_delete=models.PROTECT not working properlyDjango - on_delete=models.PROTECT 无法正常工作
【发布时间】:2017-05-13 10:03:03
【问题描述】:

朋友们好,我需要帮助,

我是 python 和 Django 的新手

这次我正在构建我的应用程序,我正在尝试使用on_delete=models.PROTECT 它工作正常,但我想替换我的模板ProtectedError 来获取任何消息。

我该怎么做?

我有这样的事情:

集团模型

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

如您所见,有一个依赖关系,如果我创建了 puerto,它不会让我删除 puerto,这很好,但我得到了模板错误,我想要一个 msg那个。

这是我的 puerto delete 视图:

波多黎各 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/(“无法删除模型的某些实例 'puerto' 因为它们是通过受保护的外键引用的: 'grupos.nombre_puerto'", ]>)

我正在想办法解决这个问题,但不知道......

我该怎么做?

谢谢...!

【问题讨论】:

  • 更新了我的答案。请现在检查并告诉我现在是否更好地处理 ProtectedError 异常?
  • 是的!按预期工作,谢谢! @PrakharTrivedi

标签: python django


【解决方案1】:

对异常问题使用try/except

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')

【讨论】:

  • 不建议一揽子捕获所有异常。相反,他应该按照except ProtectedError 的方式做一些事情。
  • @ChuckLoganLim 我明白你的意思,我之前的回答是,但后来我为了更方便而改变了它。现在更新它。
猜你喜欢
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
  • 2014-03-07
  • 2013-02-25
  • 2015-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多