2012-05-17 1 views
5

Скажем, у меня есть две модели, книга и страница:Перенаправление родителю после удаления объекта с DeleteObject родового зрения

class Book(models.Model): 
    pass 

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

Мне нужно удалить страницу и перенаправлены к конкретной книге, что страница принадлежит , Для достижения этой цели, я делаю на основе вида класса, чтобы удалить эту страницу:

class PageDeleteView(DeleteView): 
    model = Page 

    def get_success_url(self, **kwargs): 
     return reverse_lazy('book_detail', self.book.pk) 

Проблема заключается в том, что, так как объект удаляется перед тем get_success_url называется этот метод терпит неудачу, и я получаю 404 ошибки.

Как я мог это сделать?

Update:

Следуя идею @DrTyrsa, я достиг его переопределением методы удаления, так что класс будет выглядеть следующим образом: перед удалением

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

Почему у PageDeleteView есть модель = Книга? Разве это не будет модель = Страница? – jpic

+0

Вы правы, jpic. Я имел в виду «страницу», поэтому я исправил ее. – jantoniomartin

+0

Вам не нужно ленивое обращение здесь, если вы вызываете 'reverse' из метода, этот вызов уже« ленив »достаточно, чтобы не вызвать никаких проблем. – DrTyrsa

ответ

5

Сохранить объект, pk. Например, в __init__. И name your URL patterns.

+0

Возможно, можно использовать kwargs ['pk']? (или, может быть, kwargs [self.pk_url_kwarg]) – jpic

+0

DrTyrsa, мои URL-адреса названы (не в примере), но в шаблоне url у меня есть страница pk, но не Book pk (должен ли я?). Это книга pk, в которой я нуждаюсь в __init__, поэтому, возможно, я должен включить ее в шаблон url, но мне это не нравится. – jantoniomartin

+0

@jantoniomartin Мне тоже это не нравится, поэтому я не использую классные представления. :-) – DrTyrsa

Смежные вопросы