当前位置: 首页 > 知识库问答 >
问题:

在使用Django进行删除保护时引发默认错误

欧阳元魁
2023-03-14

我在我的模型中定义了一个on_delete约束,如下所示:

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

当我删除与客户相关的订单时,它将引发一个错误,但只会引发一个500错误:

"无法删除模型'Cliente'的某些实例,因为它们是通过受保护的外键引用的:'Pedido.cliente'"

还有一个完整的公共信息,如果我可以设置一个自定义消息错误,当发生这种情况时,有人知道怎么做吗?

共有2个答案

杨景山
2023-03-14

您只需在自己的视图中处理此问题:

if obj.cliente_id:
    error = "Can not delete this entry"
    # and show this error in the template
else:
    # delete the entry, or continue with delete view
壤驷康裕
2023-03-14

最后我做了这个,注意我使用了一个DeleteView来处理这个问题:

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

只需导入从django.db.models.deletion导入ProtectedError,让奇迹发生。

 类似资料:
  • 我尝试使用相同的表单登录管理员和用户,但config/auth I只能设置一个默认值 这是我的配置/auth 当我用默认的web_users登录用户时,我可以用方法Auth::user()检索他的数据,但是如果我用默认的web_admins登录管理员,则无法检索任何内容。 路线: 日志控制器 注释:对不起我的英语,我讲得不太好

  • 问题内容: 我想保护某些行以免被删除,我更喜欢使用触发器而不是应用程序的逻辑来做到这一点。我正在使用MySQL数据库。 我想到的是: 但是当我使用delete时给了我一个错误: 还有另一种方法可以做这样的事情吗? 问题答案: 一种解决方案是创建一个具有权限表外键的子表,并添加引用行以引用要阻止其删除的各个行。 现在,您无法从ID为1234的权限中删除该行,因为它会违反外键依赖性。 如果您确实想使用

  • 我有一个用于用户配置文件图像的模型,当我删除具有默认图像的用户时,默认图像也会被删除。我相信这是必须的,因为我设置了on_delete=models.CASCADE。 我尝试在ImageField中启用_delete=PROTECT,但它无法识别该属性。

  • 我正在努力研究models.cascade语句的正确用法。我有两种型号的购物车和入门车。如果删除条目,则不会更新购物车条目上的删除。我已经通过管理界面检查过了。我的models.py如下所示:

  • 问题内容: 我在Spring Boot的应用程序中添加了一个自定义的Security Config,但是有关“使用默认安全密码”的消息仍在LOG文件中。 有什么要删除的吗?我不需要此默认密码。看来Spring Boot无法识别我的安全策略。 问题答案: 我找到了关于排除 SecurityAutoConfiguration 类的解决方案。 例:

  • 是的,我知道,这听起来很愚蠢。但在我说明我的问题之前。 我有一个包含大量 J 表的 GUI。我有各种默认表模型,每个JTable一个。所以,1:1。对于每个默认表模型,我都创建了一个表模型管理器。 对于在GUI中插入和删除元素,我只创建了两个方法,addVehicle和removeVehicle: 这些方法是完美的,自动识别正确的表模型。 但我有一个必要性:因为我有很多JTable(和相应的Def