Django 更改模型、迁移和更新现有记录

时间:2021-06-08 10:16:14

标签: django django-models django-migrations

我有一个 Django 模型定义为:

from users.models import User

class Record(models.Model):
  user = models.ForeignKey(
            User,
            on_delete=SET_NULL,
            null=True)
  ...

我意识到最好将上述模型重写为:

from userprofile.models import UserProfile

class Record(models.Model):
  user = models.ForeignKey(
            UserProfile,
            on_delete=SET_NULL,
            null=True)
  ....

如何迁移(因此模型 Record 的新定义)被使用,而不必丢失数据库中的旧 Record 实例?这种迁移的一般过程是什么?因为如果我使用 Record 的新定义进行迁移,我将无法访问旧的 Record 对象,因此我无法更新它们。但是,如果我不迁移,Django 不会让我使用 UserProfile 作为 user 字段。

1 个答案:

答案 0 :(得分:0)

这种方式没有什么可以迁移的,因为 user 是一个 Python 属性并且没有支持 db 列,因为它没有被定义为 ForeignKey。

在这种情况下,Django 会自动处理这个,因为它会发现模型名称的变化,它会改变数据库端的表名,然后它会更新记录表的引用表。

您可以运行 python manage.py makemigrations 并查看生成的迁移。

相关问题