django - get_context_data - Redirigir a principal después de eliminar un objeto con la vista genérica DeleteObject
django login class based view (1)
Digamos que tengo dos modelos, Libro y Página:
class Book(models.Model):
pass
class Page(models.Model):
book = models.ForeignKey(Book)
Necesito eliminar una página y ser redirigido al libro específico al que pertenecía la página. Para lograr esto, hago una vista basada en clase para eliminar la página:
class PageDeleteView(DeleteView):
model = Page
def get_success_url(self, **kwargs):
return reverse_lazy(''book_detail'', self.book.pk)
El problema es que, dado que el objeto se elimina antes de llamar a get_success_url, este método falla y obtengo un error 404.
¿Cómo podría hacerlo?
Actualizar:
Siguiendo la idea de @DrTyrsa, lo he logrado anulando el método de eliminación, por lo que la clase sería la siguiente:
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)
Guarde el pk
del objeto antes de eliminarlo. En __init__
, por ejemplo. Y nombra tus patrones de URL .