Django 如何使用迁移将foreignkey替换为另一个

Django 如何使用迁移将foreignkey替换为另一个,django,django-models,django-migrations,Django,Django Models,Django Migrations,我想将指向我的用户模型的现有ForeignKey替换为指向配置文件模型的 模型中的变化是: created_by=models.ForeignKey(settings.AUTH_USER_MODULE) 致: 自动生成的迁移如下所示(其中包含常量子项): 我也有许多领域需要处理。我脑子里想的是在每个模型对象上运行一个函数,将用户对象解析为概要文件对象。我该怎么做呢 用户和配置文件之间的关系如下(反之亦然): 编辑:忘记提及,如果运行自动生成的迁移,则会出现以下错误: ValueError: L

我想将指向我的用户模型的现有
ForeignKey
替换为指向配置文件模型的

模型中的变化是:

created_by=models.ForeignKey(settings.AUTH_USER_MODULE)
致:

自动生成的迁移如下所示(其中包含常量子项):

我也有
许多领域
需要处理。我脑子里想的是在每个模型对象上运行一个函数,将用户对象解析为概要文件对象。我该怎么做呢

用户和配置文件之间的关系如下(反之亦然):

编辑:忘记提及,如果运行自动生成的迁移,则会出现以下错误:

ValueError: Lookup failed for model referenced by field 
APP1.MODEL.created_by: APP2.PROFILE_MODEL

据我所知,现在您只想迁移我们的应用程序,而不希望对全局身份验证用户模型进行任何更改。那就容易了。迁移可以很好地处理符号设置名称

我用Django 1.7试过了。可以在settings.AUTH\u USER\u MODEL和settings.PROFILE\u MODEL之间来回切换,没有任何问题。每次更改后都可以创建并应用迁移。经过测试的模型还具有许多领域,用户和配置文件之间存在相互关系

我看到你有APP1和APP2。可能您对这两种迁移都进行了迁移,并且它们是循环相关的,因此在当前迁移可以完全应用之前,应该应用其他应用程序迁移的一部分,反之亦然。它可以通过将更改拆分为更小的更改并在每次更改后进行自动迁移来简化,从而减少依赖性。一个
OneToOneField
比两个相互的外键更好,其反向关系甚至非常有用。在最坏的情况下,外键可以临时更改为
IntegerField(null=True)
,以简化数据迁移。这真的或多或少是好的

这个问题一开始看起来不错,但应该更好地说明问题的可重复性


通过阅读评论中的信息后删除原始文本进行编辑:

1)我认为不是,返回的实际错误是
ValueError:xsd_training.performedlessue.trainiee:xsd_members.MemberProfile
我只是将我的应用程序名称分为通用名称,以简化问题。我不认为这样做会有什么帮助,相反,它会将绝对名称传递给不需要的迁移文件。2)这看起来像是我的问题,不确定你得到了什么,虽然我在答案中添加了更多信息。我已经阅读了警告,但我非常确定这是可行的。通过检查数据库,文档引用的外键关系只是FK列的名称(user_id),我通过调用我的自定义用户(即
myapp.user
)解决了这个问题。我看到的步骤是:-创建新用户表,-将数据从旧用户迁移到新用户,-更改
AUTH\u USER\u MODEL
和FK关系,交叉手指,希望一切正常。我的问题是如何在django的迁移系统中实现这一点,我希望这样做可以使部署相对轻松。答案完全重写了。(我想你指的是AUTH_USER_MODEL,而不是AUTH_USER_MODULE。)设法找到了
ValueError
的根,似乎makemigrations没有将新FK的应用添加到迁移的依赖项中(即上面的APP2)。不确定,但这感觉像是一个bug。APP2在已安装的应用程序中吗?Django 1.7源代码中的“字段引用的模型的查找失败”通常是由于安装的应用程序中缺少应用程序或迁移的循环依赖性造成的。如果你的代码看起来还可以,写一个关于这个bug的小例子。我可以尝试确认并参与报告问题。欢迎明确结束。应用程序已安装在应用程序中。我将创建一个新项目,看看是否可以在干净的环境中复制它,并将其放在github上。
migrations.AlterField(
        model_name=MODEL,
        name='created_by',
        field=models.ForeignKey(to=settings.PROFILE_MODEL),
        preserve_default=True,
    ),
User.profile = Profile
ValueError: Lookup failed for model referenced by field 
APP1.MODEL.created_by: APP2.PROFILE_MODEL