可以将bool迁移到int,转换值

时间:2013-09-04 06:54:50

标签: django django-south data-migration

我对南方迁移方案和数据的概念模糊不清,但现在我想要做一些更先进的事情;

我有一个模型,其中包含一个boolfield指示状态(活动/非活动),现在我需要使用整数字段添加其他可能性。使用南方计划移民,这种变化本身非常简单。

问题是我需要将现有对象(大约400+)中的状态转换为整数(0表示false,1表示true)。

这是否可能,或者我是否需要寻找其他方式?

3 个答案:

答案 0 :(得分:0)

您使用什么数据库系统? mySQL? 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

答案 1 :(得分:0)

我遇到类似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语法会有所不同)

答案 2 :(得分:-1)

阅读完文档后,这非常简单(doh!)。

schemamigration - 添加intfield datamigration - 如果bool>> int = 1,else int = 0 schemamigration - 删除boolfield