Hãy nói rằng tôi có hai mô hình, Sách và Page:Redirect để cha mẹ sau khi xóa một đối tượng với DeleteObject nhìn chung
class Book(models.Model):
pass
class Page(models.Model):
book = models.ForeignKey(Book)
tôi cần phải xoá một trang và được chuyển đến cuốn sách cụ thể mà trang thuộc về . Để đạt được điều này, tôi thực hiện một căn cứ xem lớp để xóa trang:
class PageDeleteView(DeleteView):
model = Page
def get_success_url(self, **kwargs):
return reverse_lazy('book_detail', self.book.pk)
Vấn đề là, kể từ khi đối tượng được xóa trước khi get_success_url được gọi là, phương pháp này không thành công, và tôi nhận được một lỗi 404.
Tôi có thể làm như thế nào?
Cập nhật:
Tiếp nối ý tưởng của @DrTyrsa, tôi đã đạt được nó trọng các phương pháp xóa, vì vậy lớp sẽ như sau:
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)
Tại sao PageDeleteView có model = Sách? Nó có nên là model = Trang không? – jpic
Bạn nói đúng, jpic. Tôi có nghĩa là 'Trang', vì vậy tôi đã sửa nó. – jantoniomartin
Bạn không cần phải lật ngược ở đây, nếu bạn gọi là 'đảo ngược' từ một phương thức, cuộc gọi này đã "lười" đủ để không gây ra bất kỳ vấn đề nào. – DrTyrsa