2016-05-16 146 views
1

我在模型文件Add_catAdd_prod中有兩個類。通過第一個類創建類別,並通過第二個類創建書名,作者,價格和圖像。我在我的第二課中將類別作爲外鍵,然後爲add_prod.Through模板創建了一些記錄。我創建了一個用於刪除所選類別的按鈕。如果所選類別包含記錄,我們不能刪除它,因爲我使用了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>])。是否可以創建自定義異常消息而不是顯示默認異常?如何在django中爲on_delete = models.PROTECT創建自定義異常消息

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

與嘗試sorrounding除了

的簡單的事情
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') 
+0

感謝它的工作 – Bhanukiran

+0

很高興能有幫助 – e4c5

相關問題