2012-05-17 11 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 त्रुटि मिलता है।

मैं यह कैसे कर सकता हूं?

अद्यतन:

@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

आप सही हैं, जेपीआईसी। मेरा मतलब 'पेज' था, इसलिए मैंने इसे ठीक कर दिया है। – jantoniomartin

+0

यदि आपको किसी विधि से 'रिवर्स' कहा जाता है, तो आपको आलसी रिवर्सिंग की आवश्यकता नहीं है, यह कॉल पहले से ही "आलसी" है जो किसी भी समस्या का कारण नहीं है। – DrTyrsa

उत्तर

5

सहेजें वस्तु की pk को हटाने से पहले। उदाहरण के लिए, __init__ में। और name your URL patterns

+0

शायद kwargs ['pk'] का उपयोग करना संभव है? (या शायद kwargs [self.pk_url_kwarg]) – jpic

+0

DrTyrsa, मेरे यूआरएल का नाम दिया गया है (उदाहरण में नहीं), लेकिन यूआरएल पैटर्न में मेरे पास पृष्ठ पीके है, लेकिन पुस्तक पीके नहीं है (क्या मुझे चाहिए?)। यह पुस्तक पीके है जो मुझे __init__ में चाहिए, इसलिए शायद मुझे इसे यूआरएल पैटर्न में शामिल करना चाहिए, लेकिन मुझे यह समाधान पसंद नहीं है। – jantoniomartin

+0

@jantoniomartin मुझे यह पसंद नहीं है, इसलिए मैं कक्षा-आधारित विचारों का उपयोग नहीं करता हूं। :-) – DrTyrsa

संबंधित मुद्दे