【发布时间】:2018-10-14 02:13:38
【问题描述】:
我有一个很大的 Django 应用程序,目前正在尝试从 1.6 升级到 1.7(曾经尝试直接升级到 1.11,但是太麻烦了,所以我的计划是一次只做一个小程序)。
我正在遵循Upgrade from South 的说明,并删除了所有以前的迁移,但我无法让makemigrations 工作。当前的问题是auth.User 模型已被修补以包含两个新字段:
User.add_to_class('profile',
models.ForeignKey('access.Profile', null=True, blank=True,
related_name='user_foreignkey'))
User.add_to_class('profiles',
models.ManyToManyField('access.Profile', null=True,
blank=True))
这个补丁是在一个单独的应用程序中制作的。如果我把它留在原处,运行python manage.py makemigrations 时会出现以下错误:
ValueError: Lookup failed for model referenced by field auth.User.profiles:
access.Profiles
我尝试将add_to_class 调用移动到定义Profile 的同一文件(在定义之后),但得到了同样的错误。我还尝试将语法从 'access.Profile' 更改为 Profile,但没有效果。有没有其他东西可以使这项工作?
如果不是,因为我正在向模型添加字段,我认为正确的方法是扩展 AbstractUser 模型,正如 this guide 所建议的那样。这样做的问题是新的初始迁移将创建一个表access_user,而不是使用现有的auth_user。简单地将auth_user 重命名为access_user 并伪造迁移是否安全?
欢迎任何其他关于如何以最少的重构来克服这个问题的建议(管理层总是认为有比升级更紧迫的事情)。
【问题讨论】:
-
不建议删除迁移文件,除非您知道自己在做什么,或者完全重新启动您的项目(包括数据库)
-
@Lemayzeur 删除迁移(文件,而不是从数据库中)是Update from South 说明的一部分。
标签: python django django-authentication django-1.7