Django 将现有字段更改为外键

2023-11-26

我有一个 Django 模型,以前看起来像这样:

class Car(models.Model):
    manufacturer_id = models.IntegerField()

还有另一种模型叫Manufacturerid字段指的是。然而,我意识到使用 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因为我需要在开发人员、产品人员和同事的计算机上可靠地工作。


您可以进行数据迁移

  1. 添加新字段
  2. 进行数据迁移https://docs.djangoproject.com/en/3.1/topics/migrations/#data-migrations
  3. 删除旧字段

我不确定,可能还有另一种解决方案,您可以将字段重命名为您想要的名称,然后将字段更改为新类型(进行迁移)

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
            ),
    ]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 将现有字段更改为外键 的相关文章

随机推荐