2014-11-24 38 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:请使用Django模板;)

+1

是啊,我只是试图'self.get_object()customer.id'它的工作。谢谢.. – 2014-11-24 19:57:43