我对使用 South 迁移方案和数据的概念隐约熟悉,但现在我想完成一些更高级的事情;
我有一个模型,它包含一个指示状态(活动/非活动)的布尔字段,现在我需要使用整数字段添加其他可能性。使用 Souths schememigration,更改本身非常简单。
问题是我需要将现有对象(大约 400+)中的状态转换为整数(0 表示假,1 表示真)。
这甚至可能吗,还是我需要找到另一种方法?
我对使用 South 迁移方案和数据的概念隐约熟悉,但现在我想完成一些更高级的事情;
我有一个模型,它包含一个指示状态(活动/非活动)的布尔字段,现在我需要使用整数字段添加其他可能性。使用 Souths schememigration,更改本身非常简单。
问题是我需要将现有对象(大约 400+)中的状态转换为整数(0 表示假,1 表示真)。
这甚至可能吗,还是我需要找到另一种方法?
您使用什么数据库系统?我的 SQL 吗?PostgreSQL ?SQLite ? .. 对我来说,最容易迁移数据的是一个 SQL 补丁。
例如,对于 PostgreSQL:
-- DROP DEFAULT IF THERE IS ONE
ALTER TABLE app_name.model_name ALTER mycolumn TYPE integer USING CASE WHEN mycolumn=FALSE THEN 0 ELSE 1 END;
-- SET A NEW DEFAULT IF THERE WAS ONE
我对 PostgreSQL 有类似的问题,像这样改变迁移有帮助:
def forwards(self, orm):
# Changing field 'SomeModel.status'
hlp = db.alter_string_set_type
db.alter_string_set_type = 'ALTER COLUMN %(column)s TYPE %(type)s USING %(column)s::integer::smallint'
db.alter_column('someapp_somemodel', 'status', self.gf('django.db.models.fields.PositiveSmallIntegerField')())
db.alter_string_set_type = hlp
def backwards(self, orm):
# Changing field 'SomeModel.status'
hlp = db.alter_string_set_type
db.alter_string_set_type = 'ALTER COLUMN %(column)s TYPE %(type)s USING %(column)s::integer::boolean'
db.alter_column('someapp_somemodel', 'status', self.gf('django.db.models.fields.BooleanField')())
db.alter_string_set_type = hlp
(当然对于 MySQL 语法会有所不同)
阅读文档后,这非常简单(doh!)。
schemamigration - 添加 intfield 数据迁移 - 如果 bool >> int = 1,否则 int = 0 schemamigration - 删除 boolfield