Django admin Внешний 'атомный' блок не может использовать savepoint = False, когда автокоммит отключен

Когда я пытаюсь удалить элемент из таблицы, созданной django admin, он выбрасывает эту ошибку

Как я могу это исправить?

Это ограничение было снято в Django 1.8.5 (коммит: django/django@425c5e4).

Однако функция Delete selected по-прежнему не будет работать, если автокоммит выключен.

1. Восстановление автокоммита при случайном отключении

Если у вас есть 'AUTOCOMMIT': False в settings.py, удалите его, и функция будет работать.

DATABASES = {
    'default': {
        ...
        'AUTOCOMMIT': False,  # Remove this line
    }
}

2. Запланировать действие с помощью transaction.atomic

Если вам нужно отключить автокоммит, установите патч actions.delete_selected в manage.py или AppConfig.

from django.contrib.admin import actions
from django.db import transaction
actions.delete_selected = transaction.atomic(actions.delete_selected)
Вернуться на верх