【发布时间】:2015-09-20 07:57:23
【问题描述】:
我有一个具有 URLField 字段的模型,我需要进行迁移,将该字段转换为外键,其中字符串是另一个对象的唯一字段,如果该对象不存在,则创建它.
例如,转这个:
class Event_UserVisit(Event_Base):
dest_url = models.URLField(max_length=1000)
进入这个:
class Event_UserVisit(Event_Base):
dest_url = models.ForeignKey(Page)
我从来没有做过这样的手动迁移,也没有找到任何教程或说明来做这样的事情。
显然做一个幼稚的迁移返回错误是这样的:
django.db.utils.ProgrammingError: column "source_url_id" cannot be cast automatically to type integer
最好的方法是什么?
注意:我需要在具有大量数据的生产数据库上执行此操作,因此我不能长时间停机并且不能丢失任何数据。
谢谢! :)
【问题讨论】:
-
你使用的是什么版本的 Django?在 Django 1.7+ 版本中,syncdb 已被“弃用”并被 migrate 取代。建议在 South 上使用 Django 自己的内置迁移工具。两者都是由 Andrew Godwin 创建的。 docs.djangoproject.com/en/1.8/topics/migrations
-
1.8,但我使用的是迁移,而不是 syncdb,没有南。我认为这个问题是合法的,例如它不是我对 django 做错的事情,它只是我不知道如何用 django 做的事情。将 URL 字段转换为现有/新对象的外键并非易事。谢谢:)
标签: django django-models django-migrations