django - 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
字段。
解决方案
以这种方式没有什么可以迁移的,因为user
它是一个 Python 属性,并且没有支持 db 列,因为它没有定义为 ForeignKey。
在这种情况下,Django 会自动处理这个问题,因为它会发现模型名称的变化,它会改变 DB 端的表名,然后它会更新 Record 表的引用表。
您可以运行python manage.py makemigrations
并查看生成的迁移。
推荐阅读
- c - Matlab、Simulink、BeagleBone Blue、Counting Steps 示例、I2C、C 代码错误
- rest - Thingsboard : Rest API 使用设备名称和客户用户凭据获取设备元数据(不使用租户帐户凭据)
- amazon-web-services - AWS ECR 跨账户复制和 KMS 加密
- c++ - 没有匹配函数调用“student::student()”错误
- java - 等待空 BlockingQueue 的首选方法
- macos - macOS 中不同的 cocoapods 版本
- python - 记录用户的帖子喜欢时间
- vue.js - Vue v3中的VideoJS播放列表超过最大调用堆栈大小错误
- android - 应用程序安装选项“默认 APK”和“应用程序包中的 APK”在 Gradle 任务方面有什么区别
- node.js - node.js中如何使用memoryStorage()上传文件