#python #django #transactions
#python #django #транзакции
Вопрос:
Я хочу, чтобы порядок менял статус при возникновении исключения в блоке transaction.atomic.
Работает ли следующий код?
try:
with transaction.atomic():
order = Order.objects.create(
status='PAYING'
)
except Exception as e:
order.status = 'FALIED'
order.save()
Комментарии:
1. Если возникает исключение, скорее
order
всего, оно не было создано, поэтому вы не можете установить его статус на что-либо…2. Также нет оснований предполагать, что если первое сохранение завершится неудачно, второе должно сработать, но это, вероятно, потому, что этот пример слишком сведен к основам.
Ответ №1:
Как написано, это не сработает, поскольку create()
вызывает исключение, прежде чем оно сможет вернуть значение order
.
Обратите внимание, однако, что create()
это просто сокращение для создания экземпляра и его сохранения. Таким образом, вы можете написать это таким образом:
order = Order(status='PAYING')
try:
with transaction.atomic():
order.save()
except Exception as e:
order.status = 'FALIED'
order.save()