【发布时间】:2014-02-03 05:34:06
【问题描述】:
我想在更新/编辑表单中创建一个Cancel 按钮,但我不断收到AttributeErrorexception:
'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'
我到底做错了什么?此外,我考虑过是否可以在模板中获取success_url 变量,以便在按钮中简单地使用它而不执行整个POST 过程?
更新:
success_url 正常提交表单时工作正常。
【问题讨论】:
-
@petkostas,不可能,因此它在成功时表单反转时起作用。
-
问题是默认的updateview这样调用成功的url:
if self.success_url: url = self.success_url % self.object.__dict__确保你有一个self.object实例self.object = self.get_object()或者只是返回一个HttpResponseRedirect和一个自定义的url无需调用self.get_success_url()
标签: django