Скажем, у меня есть две модели, книга и страница:Перенаправление родителю после удаления объекта с 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)
Почему у PageDeleteView есть модель = Книга? Разве это не будет модель = Страница? – jpic
Вы правы, jpic. Я имел в виду «страницу», поэтому я исправил ее. – jantoniomartin
Вам не нужно ленивое обращение здесь, если вы вызываете 'reverse' из метода, этот вызов уже« ленив »достаточно, чтобы не вызвать никаких проблем. – DrTyrsa