将外键更改为IntegerField而又不丢失数据的Django迁移策略

问题描述 投票:0回答:1

我有模特

class SomeModel(models.Model):
    target_field = models.ForeignKey(
        'OtherModel', on_delete=models.PROTECT, verbose_name=_('Target Field'),
    )

而且我想将其更改为

class SomeModel(models.Model):
    target_field_id = models.PositiveIntegerField(_('Target field id'))

我想做到这一点而不会丢失ForeignKey字段存储在target_field_id中的数据。

我只是尝试进行makemigrations。但是它将删除列,然后创建新列。

非常感谢您的帮助。

python django django-models django-migrations
1个回答
0
投票

在Django ForeignKey中,字段的值存储在末尾带有_id的属性中,您可以直接访问该属性以避免访问数据库。我建议不要更改属性名称,只需将models.ForeignKey更改为models.PositiveIntegerField。没有数据丢失。

© www.soinside.com 2019 - 2024. All rights reserved.