From 7f8e303a956d462cecb048f5d033e0f721c5484f Mon Sep 17 00:00:00 2001 From: Corey Oordt Date: Thu, 28 May 2015 20:24:48 -0500 Subject: [PATCH] Version 1.3b8: Fixes some migrations --- categories/__init__.py | 2 +- categories/migration.py | 23 +++++++++++++++-------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/categories/__init__.py b/categories/__init__.py index 252a565..0d84c43 100644 --- a/categories/__init__.py +++ b/categories/__init__.py @@ -3,7 +3,7 @@ __version_info__ = { 'minor': 3, 'micro': 0, 'releaselevel': 'beta', - 'serial': 7 + 'serial': 8 } diff --git a/categories/migration.py b/categories/migration.py index d9af11f..77b061b 100644 --- a/categories/migration.py +++ b/categories/migration.py @@ -1,8 +1,9 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, connection +from django.db import connection, transaction from django.apps import apps +from django.db.utils import ProgrammingError def table_exists(table_name): @@ -48,10 +49,16 @@ def migrate_app(sender, *args, **kwargs): fields = [fld for fld in registry._field_registry.keys() if fld.startswith(app_name)] - with connection.schema_editor() as schema_editor: - for fld in fields: - model_name, field_name = fld.split('.')[1:] - if field_exists(app_name, model_name, field_name): - continue - model = app_config.get_model(model_name) - schema_editor.add_field(model, registry._field_registry[fld]) + sid = transaction.savepoint() + for fld in fields: + model_name, field_name = fld.split('.')[1:] + if field_exists(app_name, model_name, field_name): + continue + model = app_config.get_model(model_name) + try: + with connection.schema_editor() as schema_editor: + schema_editor.add_field(model, registry._field_registry[fld]) + transaction.savepoint_commit(sid) + except ProgrammingError: + transaction.savepoint_rollback(sid) + continue