Python 如何以与South兼容的方式使用UUIDField?
通常,我可以解决突然出现的数据库迁移问题,但这一点让我感到困惑 我创建了一个新模型,其中django extensions的UUIDField作为主键Python 如何以与South兼容的方式使用UUIDField?,python,django,django-south,django-extensions,Python,Django,Django South,Django Extensions,通常,我可以解决突然出现的数据库迁移问题,但这一点让我感到困惑 我创建了一个新模型,其中django extensions的UUIDField作为主键 # BaseModelNamed is just a mixin which provides some basic fields # e.g. name, description, slug, created, modified class UUIDObject(BaseModelNamed): uuid = UUIDField(pri
# BaseModelNamed is just a mixin which provides some basic fields
# e.g. name, description, slug, created, modified
class UUIDObject(BaseModelNamed):
uuid = UUIDField(primary_key=True)
我还有另一个模型是指这个模型的:
class ParentModel(BaseModelNamed):
default_uuidobject = models.OneToOneField(UUIDObject,
related_name='parent_model', blank=True, null=True)
uuidobject_collection = models.ManyToManyField(UUIDObject,
related_name='parent_models', blank=True, null=True)
…和自动生成的迁移:
def forwards(self, orm):
# Adding model 'UUIDObject'
db.create_table('app_uuidobject', (
('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, null=True, blank=True)),
('last_modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, null=True, blank=True)),
('name', self.gf('django.db.models.fields.CharField')(max_length=255, null=True, blank=True)),
('description', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
('slug', self.gf('django.db.models.fields.SlugField')(max_length=50, null=True, blank=True)),
('uuid', self.gf('django.db.models.fields.CharField')(max_length=36, primary_key=True)),
))
db.send_create_signal('app', ['UUIDObject'])
# Adding field 'ParentModel.default_uuidobject'
db.add_column('app_parentmodel', 'default_uuidobject',
self.gf('django.db.models.fields.related.OneToOneField')(blank=True, related_name='parent_model', unique=True, null=True, to=orm['app.UUIDObject']),
keep_default=False)
但是,当我尝试实际执行迁移时,我不断收到一个迁移错误:
django.db.utils.DatabaseError: (1005, "Can't create table 'db.#sql-819_2ed' (errno: 150)")
根据我所了解的情况,运行SHOW ENGINE INNODB STATUS可以更深入地了解问题,事实上,它揭示了这一点:
------------
最新外键错误
------------
130424 20:34:02表ebdb/sql-819\u 2ed的外键约束中存在错误:
外键'default\u uuidobject\u id'引用'app\u uuidobject``uuid`:
在引用的表中找不到
引用的列显示为第一列或列类型
表中的约束与引用的表中的约束不匹配。
如何以与South兼容的方式使用UUIDField
或者,如何解决此迁移冲突
目前,我正在使用以下软件包:
django扩展==0.9
南==0.7.6
Django==1.4.1
编辑:
我尝试过添加db_索引并在迁移中创建索引,但两种方法都没有成功:
...
'uuid',self.gf'django.db.models.fields.CharField'max_length=36,primary_key=True,db_index=True,
db.create_index'app_uuidobject',['uuid',unique=True