Django AutoOneToOneField迁移和现有条目

时间:2017-08-04 09:15:50

标签: python django postgresql django-models

在开始处理新功能之前,我有这个模型:

class AppUser(models.Model):
    user = models.OneToOneField(User, primary_key=True) #Django standard user
    # And various standard data that we don't need here

现在我需要扩展我的数据库以存储有关我在Django中的用户的更多信息,并且我来了accros django-annoying以建立这样的关系:

class TutorialProgression(models.Model):
    has_seen_home_tutorial = models.BooleanField(default=False)
    has_seen_revision_tutorial = models.BooleanField(default=False)
    has_seen_lists_tutorial = models.BooleanField(default=False)

class AppUser(models.Model):
    user= models.OneToOneField(User, primary_key=True) #Django standard user
    # Various standard data
    tutorial_progression = AutoOneToOneField(TutorialProgression)

它在这里做的是,当创建一个新的AppUser时,一个全新的TutorialProgression也是如此。但我对现有条目有疑问。我尝试使用这些修改来迁移我的postgres数据库,它要求我提供一次性默认值或在我的模型中添加默认值。

我理解这一点,但我该如何继续为每个现有AppUser提供唯一的TutorialProgression

1 个答案:

答案 0 :(得分:1)

您需要分三个阶段完成此操作。首先,使用null=True添加一对一并创建迁移。然后,创建数据迁移以遍历所有现有的AppUsers并为其创建TutorialProgressions。最后,删除null = True并创建最终迁移。