Django save_m2m() в отдельной, отложенной транзакции

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

        if form.is_valid():
            instance = form.save(commit=False)

            if form.cleaned_data['assigned_to_mtm'].count() <= 0:
                instance.status = "Unassigned"
            elif instance.status == 'Unassigned':
                instance.status = "Assigned"

            instance.save()
            form.save_m2m()

Вышеописанным способом я нахожу, что назначенный_на_mtm сразу же отражается в базе данных. Статус, однако, не отражается. Вместо этого, когда отдельное сохранение (даже на следующий день) обновляет статус на что-то другое, этот сохраненный статус появляется сразу после этого с той же временной меткой, возвращая его значение к тому, которое должно было быть в момент сохранения mtm.

Меня поражает, что я не могу заставить эти два действия происходить в одной транзакции (я пробовал использовать декоратор @transaction.non_atomic_requests и делать это самостоятельно - это не помогло), не говоря уже о том, что instance.save() висит без фиксации так долго, а затем фиксируется только когда статус снова обновляется отдельно.

Мне было бы все равно, если бы порядок сохранений хотя бы сохранялся, но смущает то, что мое предыдущее сохранение всегда совершается после следующего сохранения.

Что я делаю не так? Может ли кто-нибудь объяснить, почему это происходит?

Вернуться на верх