我有许多应用程序具有历史性的南初始迁移,我想将其转换为django 1.5适用。所以我用自定义文件换出了迁移文件中的所有orm ['auth.User']引用,但是当我尝试运行这些迁移时,我得到以下错误:
迁移错误:django_notify:0001_initial KeyError:“此迁移中无法使用应用程序'配置文件'中的模型'customuser'。”
有问题的迁移是这样的: http://bpaste.net/show/2CwaYrlNifNTd5gcHUfK/
我的自定义用户类是:
class CustomUser(AbstractUser):
image = models.ImageField(_('Image Field'), upload_to='user_images')
我也无法使用convert_to_south命令将my'profiles'应用转换为南方。我收到以下错误:
在'/ Users / tejinder / Projects / basidia / apps / profiles / migrations'中创建 init .py ...
添加了模型profiles.CustomUser
- 上为群组添加了M2M表
在profiles.CustomUser
在profiles.CustomUser上为user_permissions添加了M2M表
创建了0001_initial.py。您现在可以将此迁移应用于:./ manage.py迁移配置文件
CommandError:一个或多个模型未验证: auth.user:模型已被换出'profiles.CustomUser',它尚未安装或是抽象的。
可能出了什么问题?提前谢谢。
答案 0 :(得分:12)
请参阅此答案:Migrating existing auth.User data to new Django 1.5 custom user model?
对于从自定义用户模型开始可能有类似问题的其他人:
如果您使用的是“django.contrib.auth”且拥有自定义用户模型,则无法在未安装的应用中包含自定义用户模型的情况下运行syncdb。你会收到这个错误
CommandError:一个或多个模型未验证: auth.user:模型已被换出'myapp.User',它尚未安装或是抽象的。 admin.logentry:'user'与myapp.User模型有关系,该模型未安装或是抽象的。
因此,要修复您需要在已安装的应用中包含包含用户模型的应用,现在运行syncdb时,它将为您自己的模型添加所有表。因此,您必须将应用程序转换为南方,因为已经创建了表格。
python manage.py syncdb
python manage.py migrate
python manage.py convert_to_south myapp
这将创建0001_initial并且您收到此错误:
CommandError:一个或多个模型未验证: auth.user:模型已被换出'myapp.User',它尚未安装或是抽象的。
解决方法:
python manage.py syncdb
python manage.py migrate
python manage.py convert_to_south myapp
python manage.py migrate myapp 0001 --fake
当您运行convert_to_south时,仍然会收到上述错误,但您现在可以忽略它。 South documentation说:
convert_to_south:South将自动制作并假装应用您的第一次迁移
我认为问题在于模型验证导致convert_to_south在假装(--fake)应用您的第一次迁移之前出错。
因此,解决方法是基本上执行跳过的虚假迁移。
答案 1 :(得分:0)
前几天我解决了同样的问题,所以我想其他人可能会发现这个问题很有用。 在South具有Django 1.5+兼容性之前创建迁移时会发生这种情况。我在Django网站上使用PybbM论坛应用程序时遇到了类似的问题。解决方案是将您的模型和相关模型包含在旧迁移ORM中。有两种方法可以做到这一点:
1)您可以在每个失败的迁移文件底部的“模型”列表中手动键入模型。 2)使用您现有的一个传递迁移作为模板,并将所需的orm模型复制到最后。
示例:http://bpaste.net/show/Pv20CM5dTrbubzFZtiRY/
*请注意,您还需要复制自定义用户可能需要的任何相关模型,因此,如果我为您制作了自定义用户,则需要复制“ranking.rank”, rank.ranktest'和'schools.school'