2014-01-14 1 views
1
나는 갱신/편집 형태의 Cancel 버튼을 만들

에 취소 버튼 만들기,하지만 난 AttributeError 예외 수신 계속 :는 UpdateView 양식

'PatientUpdate' object has no attribute 'object' 

보기 :

class PatientUpdate(LoginRequiredMixin, UpdateView): 
    model = User 
    form_class = MyPatientEditForm   
    template_name = "patient/patient_edit.html" 
    success_url = reverse_lazy('patient_list') 

    def post(self, request, *args, **kwargs): 
     if "cancel" in request.POST: 
      url = self.get_success_url() 
      return HttpResponseRedirect(url) 
     else: 
      return super(PatientUpdate, self).post(request, *args, **kwargs) 

HTML :

<button class="btn" type="submit" name="cancel" value="Cancel" />Cancel</button> 

추적 :

Traceback: 
File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in get_response 
    114.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/Library/Python/2.7/site-packages/django/views/generic/base.py" in view 
    69.    return self.dispatch(request, *args, **kwargs) 
File "/Library/Python/2.7/site-packages/braces/views.py" in dispatch 
    107.    request, *args, **kwargs) 
File "/Library/Python/2.7/site-packages/django/views/generic/base.py" in dispatch 
    87.   return handler(request, *args, **kwargs) 
File "/Users/Maziar/Dropbox/Sandbox/tutorial/web/views.py" in post 
    60.    url = self.get_success_url() 
File "/Library/Python/2.7/site-packages/django/views/generic/edit.py" in get_success_url 
    133.    url = self.success_url % self.object.__dict__ 

Exception Type: AttributeError at /patient/edit/3 
Exception Value: 'PatientUpdate' object has no attribute 'object' 

정확히 무엇이 잘못 되었습니까? 또한 전체 POST 절차를 수행하지 않고 단추에서 단순히 사용하려면 템플릿에서 success_url 변수를 가져 오는 것이 가능한지 고려했습니다.

UPDATE : success_url 작품을 완벽하게 정상적으로 양식이 정상적으로 제출 될 때.

+0

@petkostas, cant be, 그러므로 그것은 성공했을 때 형태가 바뀔 때 작동합니다. – JavaCake

+0

문제는 기본 updateview가 성공 URL을 다음과 같이 호출한다는 것입니다. ''if self.success_url : url = self.success_url % self.object .__ dict__'' self.object 인스턴스가''self .object = self.get_object()''또는''self.get_success_url()''을 호출하지 않고 그 시간에 커스텀의 URL로 HttpResponseRedirect를 돌려줍니다. – petkostas

답변

2

get_success_url은 실제로 객체를 갖는 것에 달려 있습니다. 이 시도 :

def post(...): 
    if "cancel" in request.POST: 
     self.object = self.get_object() 
     # ... 

그런 식으로, get_success_url 당신이 편집 된 인스턴스에 액세스 할 수 및 리디렉션이 작동합니다.

도 템플릿에 성공 URL이 작동한다 방법 :

def get_context_data(self, **kwargs): 
    kwargs['success_url'] = self.get_success_url() 
    return super(..., self).get_context_data(**kwargs) 
6

사용자 누르면 그 환자 목록에 리디렉션 "취소"버튼을? 왜 추가 로직없이 간단한 링크를 만들 수 없습니다 :

<a href="{% url 'patient_list' %}">Cancel</a> 
0

을 나는 submit_line.html 템플릿을 변경하고 request.META.HTTP_REFERER를 사용하여 다시 이전 변경 목록을 얻을 수 있습니다했습니다 '(정보를 필터링!) 당신이 왔던 곳 :