django 从 URLField 迁移到没有南的外键
django migrate from URLField to foreign key without south
我有一个包含 URLField 字段的模型,我需要进行迁移以将此字段转换为外键,其中字符串是另一个对象的唯一字段,并且如果该对象不存在创建它。
例如,转这个:
class Event_UserVisit(Event_Base):
dest_url = models.URLField(max_length=1000)
进入这个:
class Event_UserVisit(Event_Base):
dest_url = models.ForeignKey(Page)
我从来没有像这样手动迁移过,也没有找到任何教程或说明来做这样的事情。
显然是在进行简单的迁移 return 错误如下:
django.db.utils.ProgrammingError: column "source_url_id" cannot be cast automatically to type integer
最好的方法是什么?
注意:我需要在具有大量数据的生产数据库上执行此操作,因此我不能长时间停机并且不能丢失任何数据。
谢谢! :)
我认为您不能一次性在 ORM 级别完成此操作(除非有人纠正我)您可能需要创建一个新的 FK 可能 dest_url2
运行 迁移,然后编写一个迁移数据的脚本。接下来,再次删除 dest_url
运行 个迁移。然后将 dest_url2
重命名为 dest_url
Django 将检测此处的名称更改。
但是,我不明白你为什么要将页面上的 FK ID 链接到名为 dest_url
的字段。 Page里的PK不应该是1000 max URL!它没有顺序,会使索引变得困难并减慢您的应用程序。这样做会更有意义...
class Event_UserVisit(Event_Base):
page = models.ForeignKey(Page, related_name='eventvisits')
我假设 Page 看起来像这样...
class Page(models.Model):
dest_url = models.URLField(max_length=1000)
我有一个包含 URLField 字段的模型,我需要进行迁移以将此字段转换为外键,其中字符串是另一个对象的唯一字段,并且如果该对象不存在创建它。
例如,转这个:
class Event_UserVisit(Event_Base):
dest_url = models.URLField(max_length=1000)
进入这个:
class Event_UserVisit(Event_Base):
dest_url = models.ForeignKey(Page)
我从来没有像这样手动迁移过,也没有找到任何教程或说明来做这样的事情。
显然是在进行简单的迁移 return 错误如下:
django.db.utils.ProgrammingError: column "source_url_id" cannot be cast automatically to type integer
最好的方法是什么?
注意:我需要在具有大量数据的生产数据库上执行此操作,因此我不能长时间停机并且不能丢失任何数据。
谢谢! :)
我认为您不能一次性在 ORM 级别完成此操作(除非有人纠正我)您可能需要创建一个新的 FK 可能 dest_url2
运行 迁移,然后编写一个迁移数据的脚本。接下来,再次删除 dest_url
运行 个迁移。然后将 dest_url2
重命名为 dest_url
Django 将检测此处的名称更改。
但是,我不明白你为什么要将页面上的 FK ID 链接到名为 dest_url
的字段。 Page里的PK不应该是1000 max URL!它没有顺序,会使索引变得困难并减慢您的应用程序。这样做会更有意义...
class Event_UserVisit(Event_Base):
page = models.ForeignKey(Page, related_name='eventvisits')
我假设 Page 看起来像这样...
class Page(models.Model):
dest_url = models.URLField(max_length=1000)