【发布时间】:2016-07-02 10:09:45
【问题描述】:
如何对失败的 Django 事务做出反应?例如返回某种错误页面或重新加载页面等。
代码中有with transaction.atomic(),所以如果用户已经保存,但在保存用户配置文件时出现问题,一切都会回滚。
但是,当事务失败并回滚时,如何检测和应对情况呢?
if request.method == 'POST':
if register_as_translator_form.is_valid():
cleaned = register_as_translator_form.cleaned_data
with transaction.atomic():
request.user.first_name = cleaned['first_name']
request.user.last_name = cleaned['last_name']
request.user.userprofile.IBAN = cleaned['IBAN']
languages = cleaned['languages']
language_levels = get_or_create_unknown_language_levels(languages)
request.user.userprofile.language_levels.add(*language_levels)
request.user.save()
request.user.userprofile.is_translator = True
request.user.userprofile.save()
return HttpResponseRedirect('/register-translator-success')
【问题讨论】:
-
documentation 详细介绍了这一点。如果事务回滚,则会引发异常,由您来捕获它并决定要做什么。至于合适的动作是什么,这肯定取决于你的应用吗?
标签: python django transactions