2

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

模型的变化是:

created_by=models.ForeignKey(settings.AUTH_USER_MODULE)

至:

created_by=models.ForeignKey(settings.PROFILE_MODEL)

自动生成的迁移看起来像(带有常量):

migrations.AlterField(
        model_name=MODEL,
        name='created_by',
        field=models.ForeignKey(to=settings.PROFILE_MODEL),
        preserve_default=True,
    ),

我也ManyToManyFields得应付。我脑子里想的是我想要一个在每个模型对象上运行的函数,以将用户对象解析为配置文件对象。我该怎么做呢?

用户和个人资料之间的关系是(反之亦然):

User.profile = Profile

编辑:忘了提,如果运行自动生成的迁移,您会收到以下错误:

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

1 回答 1

0

据我了解,您现在只想迁移我们的应用程序,而不期望将任何内容更改为全局身份验证用户模型。然后很容易。迁移适用于符号设置名称。

我用 Django 1.7 试过了。可以在 settings.AUTH_USER_MODEL 和 settings.PROFILE_MODEL 之间来回切换,没有任何问题。每次更改后都可以创建和应用迁移。测试模型还具有 ManyToManyField 以及 User 和 Profile 之间的相互关系。

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

这个问题最初看起来不错,但应该更好地指定问题是可重现的。

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

于 2014-11-10T02:46:27.333 回答