首页 > 解决方案 > Django 更改模型、迁移和更新现有记录

问题描述

我有一个 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字段。

标签: djangodjango-modelsdjango-migrations

解决方案


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

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

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


推荐阅读