2016-05-16 9 views
1

モデルファイルAdd_catAdd_prodに2つのクラスがあります。最初のクラスを作成し、2番目のクラスを作成して、ブック名、著者、価格、イメージを作成しました。私は2番目のクラスで外部キーとしてカテゴリを作ってから、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>])。デフォルトの例外を表示する代わりにカスタム例外メッセージを作成することは可能ですか?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

関連する問題