0
失敗したDjangoトランザクションの対応方法?たとえば、何らかのエラーページを返したり、ページをリロードしたりしてください。失敗したトランザクション(Django)での反応方法
コードにwith transaction.atomic()
がありますので、userprofileの保存中に問題が発生した場合は、すべてがロールバックされます。
しかし、トランザクションが失敗してロールバックされた状況を検出して対応する方法はありますか?
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](https://docs.djangoproject.com/en/1.9/topics/db/transactions/)ではこれについて詳しく説明しています。トランザクションがロールバックされると、例外が発生し、それをキャッチして何をすべきかを決定するのはあなた次第です。適切なアクションが何であるかについては、確かにこれはアプリケーションに依存しますか? – solarissmoke