如何在django中为on_delete = models.PROTECT创建自定义异常消息

时间:2016-05-16 08:59:33

标签: python django django-models

我在模型文件Add_catAdd_prod中有两个类。通过第一个类我创建了类别,通过第二个类我创建了书名,作者,价格和图像。我将类别作为外国人键入我的第二课,然后我为add_prod创建了一些记录。通过模板我创建了一个删除所选类别的按钮。如果所选类别包含记录我们无法删除它,因为我使用ondelete = models.PROTECT,现在如果我尝试删除包含add_prod表中记录的类别django给我一个这样的例外,("Cannot delete some instances of model 'Add_cat' because they are referenced through a protected foreign key: 'Add_prod.cat'", [<Add_prod: Add_prod object>])。是否可以创建自定义异常消息而不是显示默认异常?

Models.py,

class Add_cat(models.Model):
    category = models.CharField("Name",max_length=25,unique=True,error_messages={'unique':"This category already exists"})

    def __unicode__(self):
        return u'{0}'.format(self.category)

class Add_prod(models.Model):
    book = models.CharField("Book Name",max_length=40)
    author = models.CharField("Author",max_length=30)
    price = models.PositiveIntegerField("Price")
    image = models.ImageField(upload_to='images',null=True)
    cat = models.ForeignKey(Add_cat,on_delete=models.PROTECT)

Views.py,

def del_cat(request,pk):
    query = Add_cat.objects.get(pk=pk)
    query.delete()
    messages.add_message(request, messages.INFO, 'Category Deleted')
    return redirect("add_cat")

我的模板文件中的删除按钮

<button onclick="return confirm('Are you sure want to delete?');"><a href="{% url 'del_prod' pk=i.pk %}">Delete</a></button>

1 个答案:

答案 0 :(得分:1)

除了

之外的简单问题
def del_cat(request,pk):
    try:
        query = Add_cat.objects.get(pk=pk)
        query.delete()
        messages.add_message(request, messages.INFO, 'Category Deleted')
        return redirect("add_cat")
    except:
       return HttpResponse('Cant delete that row mate')

您可能想要渲染一些模板或添加消息,而不是像这样发送一个简单的错误,而是这次表示无法删除该类别然后重定向。

  messages.add_message(request, messages.INFO, 'Category Not Deleted')