2017-07-23 77 views
2

我使用Django 1.11,PostgreSQL 9.6和Django迁移工具。我找不到指定列顺序的方法。在最初的迁移中,更改字段的顺序很好,但migrations.AddField()调用了什么? AddField调用也可能发生在初始迁移的外键添加中。有什么方法可以指定顺序,还是我只是痴迷于订单,但我不应该?讨论后Django迁移数据库列顺序

更新

的PostgreSQL数据库管理系统不支持位置列相加。因此,从用于添加色谱柱的迁移工具中预期此设施实际上没有意义。

回答

1

AFAIK,没有官方支持的方式来做到这一点,因为字段应该是原子的,它应该是不相关的。但是,它也会让我迷恋强迫的一面,并且我喜欢在我需要调试dbshell中的东西时订购我的列。下面是我找到了你可以这样做:

  • migrations.createModel

好运气做一个迁移与python manage.py makemigrations

  • 编辑迁移文件,并重新排序fields

  • +0

    谢谢@FlipperPA,我认为这是我们可以得到的最接近的。不幸的是,没有办法为列(字段)添加工作。新添加的字段必须到列列表的末尾,不是吗? – cmertayak

    +0

    添加列时,取决于您使用的后端数据库。 IIRC,PostgreSQL和SQL Server只会将列添加到最后,除非您想重新创建整个表并迁移所有数据。在MySQL中,您可以运行'ALTER TABLE table_name ADD COLUMN column_name AFTER other_column_name'。可以修改MySQL的迁移以使用RAW SQL操作,但我不会推荐它,因为当您最终想要转换为PostgreSQL时,您将被锁定在MySQL中。 :)在这种情况下,VIEW是否足以按照所需的顺序返回列,而只留下迁移? – FlipperPA

    +0

    好的,所以PostgreSQL不支持将列添加到特定位置。听起来最好能忍受这一点。谢谢! [https://dba.stackexchange.com/a/3277](关于postgresql的位置添加的另一个讨论) – cmertayak