Я тестирую новую функцию, которая работает на определенных моделях, которые должны находиться в определенном состоянии, являющемся продуктом дорогостоящей операции, поэтому запускать ее каждый раз, когда я хочу протестировать эту функцию, - пустая трата времени, поэтому я решил, чтоОткат транзакций будет делать.
try:
with transaction.atomic():
m = MyModel.objects.get(id=some_id)
for e in m.element_set.filter(some_filter):
new_feature(m, e)
log_state(m)
raise DatabaseError
except DatabaseError:
log_state(m) # this looks like the state was restored
Этот блок используется прямо в методе представления без других переменных контекста, которые могут возиться с результатами.
Первый развсе работает как положено.Я ожидал бы точно такого же поведения в следующих запусках, так как мы откатываем изменения.Однако результат совершенно другой.
Что может быть причиной этого?Если мы возвращаем изменения базы данных в то же состояние, в котором она находилась до первого запуска функции, как мы получаем другой результат?