2012-05-17 10 views
5

ı iki model, Kitap ve Sayfa var diyelim:Yönlendirme NesneSil jenerik görüntüsü bir nesne silindikten sonra

Ben bir sayfayı silmek için ve sayfa aitti belirli bir kitabın yönlendiriliyorum ihtiyaç
class Book(models.Model): 
    pass 

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

. Bunu başarmak için, ben sayfayı silmek için bir sınıf temelli bir görünüm olun:

class PageDeleteView(DeleteView): 
    model = Page 

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

sorun get_success_url çağrılmadan önce nesne bu yöntem başarısız olur silinir beri, yani ve bir 404 hatası alıyorum.

Bunu nasıl yapabilirim?

Güncelleme: @DrTyrsa fikir ard

, bunu silme yöntemi geçersiz kılmasını elde ettik, bu yüzden aşağıdaki gibi sınıf olacaktır:

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 neden model = Book? Model = Sayfa olmamalı mı? – jpic

+0

Haklısın, Jpic. 'Sayfa' demek istedim, bu yüzden düzeltdim. – jantoniomartin

+0

Burada tembel geri dönüş yapmaya ihtiyacınız yok, eğer bir yöntemden "ters" diyorsanız, bu çağrı zaten "tembel" bir soruna yol açmayacak kadar yeterli. – DrTyrsa

cevap

5

kaydet nesne en pk silmeden önce. Örneğin, __init__. Ve name your URL patterns.

+0

Belki de kwargs ['pk'] kullanmak mümkün mü? (ya da belki kwargs [self.pk_url_kwarg]) – jpic

+0

DrTyrsa, benim URL'leri (örnekte değil) olarak isimlendirilmiştir, ancak URL şablonunda Page pk var, ama pk yapmamalı mıyım? Bu kitap, __init__ içinde ihtiyacım olan şeydir, bu yüzden onu url şablonuna eklemeliyim, ama bu çözümü sevmiyorum. – jantoniomartin

+0

@jantoniomartin Ben de sevmiyorum, bu yüzden sınıf tabanlı görünümler kullanmıyorum. :-) – DrTyrsa