使用 Django 引发默认错误 on_delete PROTECT
Posted
技术标签:
【中文标题】使用 Django 引发默认错误 on_delete PROTECT【英文标题】:Raise default error on_delete PROTECT with Django 【发布时间】:2013-08-04 01:08:25 【问题描述】:我在我的模型中定义了一个on_delete
约束,如下所示:
cliente = models.ForeignKey(Cliente,related_name="cliente",on_delete=models.PROTECT)
当我删除与客户相关的订单时,它会引发错误,但只会引发 500 错误:
“无法删除模型 'Cliente' 的某些实例,因为它们是通过受保护的外键引用的:'Pedido.cliente'”
还有一个完整的通用信息,如果我可以在发生这种情况时设置自定义消息错误,我想要什么,有人知道该怎么做吗?
【问题讨论】:
【参考方案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
?以上是关于使用 Django 引发默认错误 on_delete PROTECT的主要内容,如果未能解决你的问题,请参考以下文章
django数据模型on_delete, db_constraint的使用
Django 中创建Model时报以下错误: TypeError: init() missing 1 required positional argument: ‘on_delete’