Запросы транзакций Django не выполняются, но все еще частично фиксируются - PullRequest
2 голосов
/ 19 ноября 2011

Когда я отправляю форму, мне нужно сохранить два объекта в базе данных; однако если между первым и вторым сохранением произошел сбой, я все равно вижу первый объект в базе данных.

Поскольку я включил TransactionMiddleware в основных настройках, я хотел (и ожидал) сбой запроса на откат любого обновления базы данных, которое я сделал в результате этого запроса.

Мой код выглядит следующим образом:

def submit(request):
    form1 = Form1(request.POST)
    form2 = Form2(request.POST)

    obj1 = form1.save()

    # simulate an error
    raise Exception('spam', 'eggs')

    obj2 = form2.save(commit=False)
    obj2.obj1 = obj1
    form2.save() 

Когда я впоследствии запрашиваю базу данных, присутствует obj1. Как получить откат транзакции obj1 в результате сбоя?

(я также пытался поместить декоратор @action.commit_on_success, но obj1 все еще хранится в базе данных).

1 Ответ

2 голосов
/ 19 ноября 2011

Все зависит от базы данных, которую вы используете, для MySQL ваша таблица должна использовать Innodb (которая до недавнего времени не использовалась по умолчанию).

https://docs.djangoproject.com/en/dev/topics/db/transactions/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...