Nivel de aislamiento por transacción en Django ORM

¿Es posible establecer el nivel de aislamiento para una transacción personalizada (pero no con un sql sin procesar)?

Por ejemplo, algo como:

with transaction.commit_on_success(isolation='SERIALIZABLE'): bla 

Que yo sepa, no hay manera de cambiar temporalmente el nivel de aislamiento de la transacción en Django para una conexión (s) de base de datos existente.

Sin embargo, puede configurar otra (s) conexión (es) de base de datos que refleje sus conexiones de base de datos predeterminadas pero que establezca el nivel de aislamiento de transacción.

Por ejemplo, en su settings.py:

 DATABASES = { 'default': { 'NAME': 'app_data', 'ENGINE': 'django.db.backends.postgresql', 'USER': 'postgres_user', 'PASSWORD': 's3krit', }, 'serializable': { 'NAME': 'app_data', 'ENGINE': 'django.db.backends.postgresl', 'USER': 'postgres_user', 'PASSWORD': 's3krit', 'OPTIONS': { 'isolation_level': psycopg2.extensions.ISOLATION_LEVEL_SERIALIZABLE, }, }, } 

Para utilizar el nivel de transacción serializable, podría:

  1. Utilice el método using() QuerySet, por ejemplo, User.objects.using('serializable').all
  2. Agregue un administrador personalizado que especifique la conexión de la base de datos con el nivel de aislamiento de la transacción

     class SerializableUserManager(models.Manager): def get_queryset(self): return super(SerializableUserManager, self).get_queryset().using('serializable')