2014-11-24 1 views
2

DeleteView가 있습니다. 내가 관련 개체 ID에 액세스하려고합니다. 사용자가 POST를 요청할 때.DeleteView에서 관련 개체 ID에 액세스하는 방법

보기 :

class DeletePacketView(LoginRequiredMixin, DeleteView): 

    model = Packet 
    template_name = DELETE_PACKET_TEMPLATE 

    def get_success_url(self): 

     # Return to customer home 
     return reverse('myapp:view_customer', 
         kwargs={'pk': self.object.customer.id 
           } 
         ) 

    def post(self, request, *args, **kwargs): 

     html = """ 
       <html> 
        <head> 
         <script>window.onunload = refreshParent; function refreshParent() { 
           window.opener.location.href=%s; 
           } 
         </script> 
        </head> 
        <body> 
        <h1>object deleted successfully</h1> 
        <button type="button" onclick="window.close()">OK</button> 
        </body> 
       </html> 
       """ % reverse('myapp:view_customer', 
           kwargs={'pk': self.object.customer.id 
             } 
          ) 
     super(DeletePacketView, self).post(request, *args, **kwargs) 
     return HttpResponse(html) 

하지만 양식을 제출하려고 할 때이 오류가 발생하고있다.

역 추적 :

Environment:  

Request Method: POST 
Request URL: http://localhost:8000/delete/packet/96/ 

Django Version: 1.7 
Python Version: 2.7.8 
Installed Applications: 
('django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'myapp') 
Installed Middleware: 
('django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware', 
'django.contrib.admindocs.middleware.XViewMiddleware') 


Traceback: 
File "C:\Users\PrImE\envs\ge\lib\site-packages\django\core\handlers\base.py" in get_response 
    111.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "C:\Users\PrImE\envs\ge\lib\site-packages\django\views\generic\base.py" in view 
    69.    return self.dispatch(request, *args, **kwargs) 
File "C:\Users\PrImE\envs\ge\lib\site-packages\django\utils\decorators.py" in _wrapper 
    29.    return bound_func(*args, **kwargs) 
File "C:\Users\PrImE\envs\ge\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view 
    22.     return view_func(request, *args, **kwargs) 
File "C:\Users\PrImE\envs\ge\lib\site-packages\django\utils\decorators.py" in bound_func 

    23.   return super(LoginRequiredMixin, self).dispatch(*args, **kwargs) 
File "C:\Users\PrImE\envs\ge\lib\site-packages\django\views\generic\base.py" in dispatch 
    87.   return handler(request, *args, **kwargs) 
File "C:\Users\PrImE\workspace\myproject\repo\dev\myproject\myproject\myapp\views\delete_views\delete_packet_view.py" in post 
    66.        kwargs={'pk': self.object.customer.id 

Exception Type: AttributeError at /delete/packet/96/ 
Exception Value: 'DeletePacketView' object has no attribute 'object' 

개체가 삭제 되었기 때문에 나는이 오류를 얻고있다. 그러나 get_success_url 메서드가 제대로 작동하여 사용자를 고객 페이지로 리디렉션하는 이유는 무엇입니까 게시 메서드가 작동하고 어떻게 액세스합니까 self.object.customer.id ???

답변

4
def post(self, request, *args, **kwargs): 
    self.object = self.get_object() #Add this to load the object 
    #Your code 
    return HttpResponse(html) 

PS :. 장고 템플릿을 사용하십시오)

+1

그래, 난 그냥 시도'self.get_object()가 작동 customer.id'. 감사.. –

관련 문제