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)