2016-05-16 13 views
1

Ich habe zwei Klassen in den Modellen Datei Add_cat und Add_prod. Durch die erste Klasse erstellte ich Kategorie und durch die zweite Klasse erstellte ich Buchname, Autor, Preis und Bild. Ich habe Kategorie als Fremdschlüssel in meiner 2. Klasse gemacht und dann einige Datensätze für add_prod erstellt. Durch Vorlagen habe ich eine Schaltfläche zum Löschen der ausgewählten Kategorie erstellt. Wenn die ausgewählte Kategorie Datensätze enthält, können wir sie nicht löschen, weil ich ondelete = models.PROTECT verwendet habe , jetzt, wenn ich versuche, eine Kategorie zu löschen, die Datensätze in der Tabelle add_prod enthält django gibt mir eine Ausnahme wie diese, ("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>]). Ist es möglich, eine benutzerdefinierte Ausnahmebedingungsnachricht anstelle der Standardausnahme anzuzeigen?So erstellen Sie benutzerdefinierte Ausnahmemeldung für on_delete = models.PROTECT in django

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") 

Schaltfläche Löschen in meiner Vorlagendatei,

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

Antwort

1

einfach eine Frage der Ausnahme

mit try 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') 

Anstatt einen einfachen Fehler wie diesen zu senden, möchten Sie wahrscheinlich eine Vorlage rendern oder eine Nachricht hinzufügen, wie Sie es für erfolgreiche Ereignisse tun, aber dieses Mal um anzuzeigen, dass die Kategorie nicht gelöscht und dann umgeleitet werden konnte.

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

Dank seiner Arbeit – Bhanukiran

+0

Froh, dass ich geholfen habe – e4c5

Verwandte Themen