我在我的模型中定义了on_delete
约束,如下所示:
cliente = models.ForeignKey(Cliente,related_name="cliente",on_delete=models.PROTECT)
当我删除与客户相关的订单时,它会引发错误,但只会引发500错误:
“无法删除模型'Cliente'的某些实例,因为它们是通过受保护的外键引用的:'Pedido.cliente'”
和一个完整的常见信息,如果我能在设置自定义消息时出现错误,那么有人知道如何做到这一点吗?
答案 0 :(得分:2)
您可以在视图中处理此问题:
if obj.cliente:
error = "Can not delete this entry"
# and show this error in the template
else:
# delete the entry, or continue with delete view
答案 1 :(得分:0)
最后我用这个做了,注意我在这个问题上使用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
并让魔法发生。