我正在尝试将一些模型从一个Django应用程序迁移到另一个应用程序并基于这个问题How do I migrate a model out of one django app and into a new one?我已经得到了它非常有用但是在创建第一个迁移时我遇到了这个错误:< / p>
"The model 'contenttype' from the app 'contenttypes' is not available in this migration."
谷歌和SO似乎没有发现任何这种情况发生的事情,上述问题也没有任何具体的说法,除了代码中的评论:
if not db.dry_run:
# For permissions to work properly after migrating
orm['contenttypes.contenttype'].objects.filter(app_label='common', model='cat').update(app_label='specific')
非常感谢任何有关我做错事的见解。
以下是两个迁移文件:
创建:
# encoding: utf-8
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
db.rename_table('cars_country', 'general_country')
if not db.dry_run:
# For permissions to work properly after migrating
orm['contenttypes.ContentType'].objects.filter(app_label='cars', model='country').update(app_label='general')
def backwards(self, orm):
pass
删除:
# encoding: utf-8
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
depends_on = (
('general', '0002_create_country'),
)
def forwards(self, orm):
db.alter_column('cars_club', 'country_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['general.Country'], null=True))
def backwards(self, orm):
db.rename_table('general_country', 'cars_country')
db.alter_column('cars_club', 'country_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['cars.Country'], null=True))
答案 0 :(得分:4)
好的,找到了解决方案。来自dgel的冻结通知让我检查了南方文档并且有关于ORM迁移的通知:这是通过将模型序列化为每个迁移底部的一个名为模型的大型字典来实现的。很容易看到;它是底部的大量密码。
所以基本上我只需要将orm ['contenttypes.contenttype]移动到第二个迁移文件,因为contenttype models字典已经存在。现在一切似乎都应该有效。