2013-07-29 7 views
5

In einer Django-Anwendung entfernt worden mit Rezepten arbeiten ich DeleteView subclassed meines IngredientListItemDeleteView zu schaffen, aber ich würde das Ergebnis von get_success_url wie auf einer Eigenschaft des Elements abhängen, die gerade gelöscht .Mit get_success_url auf einem DeleteView wenn relevante Daten

Ich mag so etwas wie dies tun:

def get_success_url(self): 
    item = get_object_or_404(IngredientListItem, pk=self.kwargs['pk']) # -> 404 
    return this_item.recipe.get_absolute_url() 

Ich verstehe, dass ich einen 404-Fehler erhalten, weil die betreffende Ware nicht mehr existiert, aber ich habe kein Glück hat die relevanten Informationen über das Produkt Speicher ((sein enthaltendes Rezept), bevor es gelöscht wird. Zum Beispiel setzen, wenn ich in die get Verfahren jeden Code wie

self.success_url = get_object_or_404(IngredientListItem, 
           pk=self.kwargs['pk']).recipe.get_absolute_url() 

dann durch die Zeit success_url bei (nach dem Löschen) betrachtet, wird den Wert keine hat.

Wie kann ich meine Erfolgs-URL von dieser Eigenschaft des gelöschten Elements abhängig machen?

Antwort

6

In Django 1.6, die delete Verfahren wurde so geändert, dass die Methode get_success_urlaufgerufen wird, bevor das Objekt gelöscht wird.

Ich empfehle Ihnen, Ihre Löschmethode wie oben beschrieben außer Kraft zu setzen, bis Sie auf Django 1.6 aktualisieren. Wenn Sie dies für mehrere Klassen tun müssen, können Sie ein Mixin erstellen.

Beachten Sie, dass Sie nicht brauchen, um das Element aus der Datenbank mit get_item_or_404 zu holen - Sie können es in Ihrem get_success_url Methode als self.object zugreifen können.

+0

Danke - aber nur um zu klären, muss ich selbst.Objekt = self.get_object() definieren, bevor ich tatsächlich self.Object verwenden kann. Danke für den Tipp - scheint besser als get_item_or_404 – bryn