【问题标题】:Raise default error on_delete PROTECT with Django使用 Django 引发默认错误 on_delete PROTECT
【发布时间】:2013-08-04 01:08:25
【问题描述】:

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

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

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

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

还有一个完整的通用信息,如果我可以在发生这种情况时设置自定义消息错误,我想要什么,有人知道该怎么做吗?

【问题讨论】:

    标签: django error-handling constraints


    【解决方案1】:

    最后我做到了,注意我使用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")
    

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

    【讨论】:

    • 如何在响应中显示导致on_delete 错误的foreignkey?
    • 我收到错误:__init__() got an unexpected keyword argument 'mimetype'。如何解决这个问题?
    【解决方案2】:

    你可以在你的视图中处理这个:

    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
    

    【讨论】:

    • 谢谢,你给了我解决方案的想法 :)
    • 如何在响应中显示导致on_delete 错误的foreignkey?
    猜你喜欢
    • 2021-12-27
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 2015-02-17
    • 2017-07-31
    • 2014-07-03
    相关资源
    最近更新 更多