Django演进:如何在特定位置添加新字段?

2 投票
1 回答
672 浏览
提问于 2025-04-16 06:59

有没有办法让Django Evolution在数据库表中添加一个新字段,并且可以指定它的位置,就像SQL中的AFTER语句那样?

我有一个表,里面有一些列,我想在column1后面添加new_column。如果直接用SQL,我会这样做:

ALTER TABLE  `db_table` ADD  `new_column` DATETIME NULL DEFAULT NULL AFTER  `column1`

对于Django Evolution来说,这样写是可以的:

MUTATIONS = [
    AddField('DbTable', 'new_column', models.DateTimeField, null=True, ...)
]

不过,这样做会把new_column加到表的最后,有没有什么方法可以在上面的语句中填入一些东西,让我更好地控制字段的顺序呢?

1 个回答

1

Django这个框架不太在乎数据库里列的位置。我的猜测是,Django Evolution也是这样工作的。

所以你也不需要太过依赖或关注数据库的内部结构,毕竟你使用ORM的原因就是为了简化这些复杂的事情,对吧?

如果你真的需要这么做,我建议你可以创建一个新的类,继承自django_evolution.mutations.AddField,然后重写add_column这个方法,把AFTER这个语句加到这个方法返回的SQL语句列表里。虽然可能还有更好的方法,但这样做算是一种变通的办法。

撰写回答