无法使用django 1.5 Custom用户类执行数据迁移

tej*_*rss 6 django django-south django-1.5

我有许多应用程序具有历史性的南初始迁移,我想将其转换为django 1.5适用.所以我用自定义文件换出了迁移文件中的所有orm ['auth.User']引用,但是当我尝试运行这些迁移时,我得到以下错误:

迁移错误:django_notify:0001_initial KeyError:"此迁移中无法使用应用程序'配置文件'中的模型'customuser'."

有问题的迁移是这样的:http: //bpaste.net/show/2CwaYrlNifNTd5gcHUfK/

我的自定义User类是:

class CustomUser(AbstractUser):
    image = models.ImageField(_('Image Field'), upload_to='user_images')
Run Code Online (Sandbox Code Playgroud)

我也无法使用convert_to_south命令将my'profiles'应用程序转换为南方.我收到以下错误:

在'/ Users/tejinder/Projects/basidia/apps/profiles/migrations'中创建init .py ...

  • 添加了模型profiles.CustomUser

    • 在profiles.CustomUser上为组添加了M2M表

    • 在profiles.CustomUser上为user_permissions添加了M2M表

创建0001_initial.py.您现在可以将此迁移应用于:./ manage.py迁移配置文件

CommandError:一个或多个模型没有验证:auth.user:模型已被换出'profiles.CustomUser',它尚未安装或是抽象的.

可能出了什么问题?提前致谢.

小智 12

请参阅以下答案:将现有的auth.User数据迁移到新的Django 1.5自定义用户模型?

对于从自定义用户模型开始可能有类似问题的其他人:

如果您使用的是"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
Run Code Online (Sandbox Code Playgroud)

这将创建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
Run Code Online (Sandbox Code Playgroud)

您将仍然获得当您运行convert_to_south上述错误,但你可以忽略它.在南文档说:

convert_to_south:So​​uth将自动制作并假装应用您的第一次迁移

我认为问题在于模型验证导致convert_to_south在假装(--fake)应用您的第一次迁移之前出错.

因此,解决方法是基本上执行跳过的虚假迁移.