2012-05-17 7 views
5

Digamos que tengo dos modelos, el libro y página:Redirigir a los padres después de eliminar un objeto con DeleteObject vista genérica

class Book(models.Model): 
    pass 

class Page(models.Model): 
    book = models.ForeignKey(Book) 

tengo que eliminar una página y ser redirigido al libro específico que la página pertenecía a . Para lograr esto, hago un punto de vista basado 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 se elimina el objeto antes get_success_url se llama, este método falla, y me da un error 404.

¿Cómo podría hacerlo?

Actualización:

Siguiendo la idea de @DrTyrsa, lo he conseguido reemplazando el método de eliminación, por lo que la clase sería de la siguiente manera:

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) 
+0

¿Por qué PageDeleteView tiene el modelo = Libro? ¿No debería ser modelo = Página? – jpic

+0

Tienes razón, jpic. Quise decir 'Página', así que lo arreglé. – jantoniomartin

+0

No necesita invertir la marcha lenta, si llama 'reverse' desde un método, esta llamada ya es" floja "lo suficiente como para no causar ningún problema. – DrTyrsa

Respuesta

5

Guardar pk del objeto antes de eliminar. En __init__, por ejemplo. Y name your URL patterns.

+0

¿Tal vez es posible usar kwargs ['pk']? (o quizás kwargs [self.pk_url_kwarg]) – jpic

+0

DrTyrsa, mis URL se nombran (no en el ejemplo), pero en el patrón url tengo la página pk, pero no el libro pk (¿debería?). Es el libro pk lo que necesito en __init__, así que tal vez debería incluirlo en el patrón de url, pero no me gusta esta solución. – jantoniomartin

+0

@jantoniomartin No me gusta tampoco, es por eso que no uso vistas basadas en clases. :-) – DrTyrsa

Cuestiones relacionadas