Django Команда управления - записать все или ничего - PullRequest
0 голосов
/ 05 мая 2020

У меня есть специальная команда управления 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 будет загружена, и после возникновения исключения мне нужны данные, которые были загружены в соответствующие таблицы быть стертым. Вместо этого я наблюдаю, что таблицы загружаются нормально, возникает исключение, но после выполнения данные остаются в таблице.

По сути, я хочу, чтобы были загружены все связанные данные для данной точки данных, но если какая-либо из связанных таблиц завершится неудачно, транзакция для точки данных должна откатиться.

Что мне не хватает?

...