У меня есть специальная команда управления django. Вот как выглядит handle
и другие методы в BaseCommand:
def first_function(data_point):
another_model = AnotherModel(data=data, related_data= data_point)
another_model.save()
def second_function(data_point):
yet_another_model = YetAnotherModel(data=data, related_data= data_point)
yet_another_model.save()
def handle(self, *args, **options):
data_cursor = DataPoint.objects.filter(ready_for_migration=True)
for data_point in data_cursor.iterator():
with transaction.atomic():
self.first_function(data_point)
self.second_function(data_point)
data_point.complete=True
data_point.save()
sleep(20)
raise Exception("Testing Exeception")
Я ожидаю, что таблица AnotherModel, YetAnother Model будет загружена, и после возникновения исключения мне нужны данные, которые были загружены в соответствующие таблицы быть стертым. Вместо этого я наблюдаю, что таблицы загружаются нормально, возникает исключение, но после выполнения данные остаются в таблице.
По сути, я хочу, чтобы были загружены все связанные данные для данной точки данных, но если какая-либо из связанных таблиц завершится неудачно, транзакция для точки данных должна откатиться.
Что мне не хватает?