Django演进:如何在特定位置添加新字段?
有没有办法让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语句列表里。虽然可能还有更好的方法,但这样做算是一种变通的办法。