2012-05-17 25 views
5

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

Tại sao PageDeleteView có model = Sách? Nó có nên là model = Trang không? – jpic

+0

Bạn nói đúng, jpic. Tôi có nghĩa là 'Trang', vì vậy tôi đã sửa nó. – jantoniomartin

+0

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

Trả lời

5

Lưu đối tượng của pk trước khi xóa. Ví dụ: __init__. Và name your URL patterns.

+0

Có thể sử dụng kwargs ['pk']? (hoặc có thể kwargs [self.pk_url_kwarg]) – jpic

+0

DrTyrsa, url của tôi được đặt tên (không phải trong ví dụ), nhưng trong mẫu url tôi có Page pk, nhưng không phải là pk Sách (tôi nên?). Đó là cuốn sách pk những gì tôi cần trong __init__ vì vậy có lẽ tôi nên bao gồm nó trong mẫu url, nhưng tôi không thích giải pháp này. – jantoniomartin

+0

@jantoniomartin Tôi không thích nó, đó là lý do tại sao tôi không sử dụng chế độ xem dựa trên lớp học. :-) – DrTyrsa

Các vấn đề liên quan