python - Django将现有字段更改为外键
问题描述
我曾经有一个这样的模型:
class Car(models.Model):
manufacturer_id = models.IntegerField()
Manufacturer
该id
字段还引用了另一个模型。但是,我意识到使用 django 的内置外键功能会很有用,所以我将模型更改为:
class Car(models.Model):
manufacturer = models.ForeignKey(Manufacturer)
这实际上立即工作正常,查询工作没有错误,一切都很好,除了如果我尝试运行迁移,Django 输出以下内容:
- Remove field manufacturer_id from car
- Add field manufacturer to car
进行此迁移会清除数据库中所有现有的关系,所以我不想这样做。我根本不想要任何迁移,因为像这样的查询可以Car.objects.get(manufacturer__name="Toyota")
正常工作。我想要一个适当的数据库外键约束,但这不是一个高优先级。
所以我的问题是:有没有办法进行迁移或其他允许我将现有字段转换为外键的方法?我不能使用--fake
,因为我需要可靠地跨开发、生产和我的同事计算机工作。
解决方案
您可以进行数据迁移
- 添加新字段
- 进行数据迁移https://docs.djangoproject.com/en/3.1/topics/migrations/#data-migrations
- 删除旧字段
我不确定,可能还有另一种解决方案,您可以将字段重命名为您想要的名称,然后将字段更改为新类型(进行迁移)
operations = [
migrations.RenameField(
model_name='car',
old_name='manufacturer_id',
new_name='manufacturer',
),
migrations.AlterField(
model_name='car',
name='manufacturer',
field=ForeignKey(blank=True, null=True,
on_delete=django.db.models.deletion.CASCADE
),
]
推荐阅读
- vb.net - VB.net 视频文件仅在 windows 媒体播放器中播放音乐
- numpy - Numpy 3D Array/Eigen Tensor C++,将每一行乘以其转置
- javascript - jQuery datetimepicker 上的递归错误太多
- scikit-learn - 关于 Anaconda 商业版 2.1.0 上的 scikit-learn 的问题
- android - Android CameraX:ImageCapture 与 Preview 有点不同
- angular - 提供预验证角度 Slick-grid 可拖动分组功能。还以编程方式从分组中删除特定列
- python - 使用 ELM 进行近似偏微分方程 (PDE)
- c++ - 获取密集 Eigen::Matrix 对象的所有非零值
- angular - Angular 11 中 ng2-charts 的注释问题
- vb.net - 如何知道我的下一个短代码应该在数据库中