Lassen Sie sich sagen, ich habe zwei Modelle, Buch und Seite:Umleiten zu Eltern, nachdem ein Objekt mit DeleteObject allgemeiner Ansicht löschte
class Book(models.Model):
pass
class Page(models.Model):
book = models.ForeignKey(Book)
Ich brauche eine Seite zu löschen und auf das spezifische Buch umgeleitet werden, dass die Seite der dominierende Mannschaft . Um dies zu erreichen, mache ich eine Klasse basierend Ansicht, die die Seite zu löschen:
class PageDeleteView(DeleteView):
model = Page
def get_success_url(self, **kwargs):
return reverse_lazy('book_detail', self.book.pk)
Das Problem ist, dass, da das Objekt gelöscht wird, bevor get_success_url aufgerufen wird, versagt diese Methode, und ich erhalte einen 404-Fehler.
Wie könnte ich es tun?
Update:
die Idee @DrTyrsa Folgen, habe ich es die Lösch Methode überschreibt erreicht, so würde die Klasse wie folgt:
reverse_lazy = lambda name=None, *args : lazy(reverse, str)(name, args=args)
class PageDeleteView(DeleteView):
model = Page
def get_success_url(self, **kwargs):
return reverse_lazy('book_detail', self.book.pk)
def delete(self, request, *args, **kwargs):
self.book_pk = self.get_object().book.pk
return super(PageDeleteView, self).delete(request, *args, **kwargs)
Warum hat PageDeleteView model = Book? Sollte es nicht Model = Page sein? – jpic
Sie haben Recht, jpic. Ich meinte 'Seite', also habe ich es behoben. – jantoniomartin
Sie brauchen hier nicht faul umzukehren, wenn Sie 'reverse' von einer Methode aufrufen, ist dieser Aufruf bereits" faul "genug, um kein Problem zu verursachen. – DrTyrsa