Django Migration Database Column Order

Question:

I use Django 1.11, PostgreSQL 9.6 and Django migration tool. I couldn’t have found a way to specify the column orders. In the initial migration, changing the ordering of the fields is fine but what about migrations.AddField() calls? AddField calls can also happen for the foreign key additions for the initial migration. Is there any way to specify the ordering or am I just obsessed with the order but I shouldn’t be?

Update after the discussion

PostgreSQL DBMS doesn’t support positional column addition. So it is practically meaningless to expect this facility from the migration tool for column addition.

Asked By: cmertayak

||

Answers:

AFAIK, there’s no officially supported way to do this, because fields are supposed to be atomic and it shouldn’t be relevant. However, it messes with my obsessive-compulsive side as well, and I like my columns to be ordered for when I need to debug things in dbshell, for example. Here’s what I’ve found you can do:

  • Make a migration with python manage.py makemigrations
  • Edit the migration file and reorder the fields in migrations.createModel
Answered By: FlipperPA

I am not 100% sure about the PostgreSQL syntax but this is what it looks like in SQL after you have created the database. I’m sure PostgreSQL would have an equivalent:

ALTER TABLE yourtable.yourmodel
CHANGE COLUMN columntochange columntochange INT(11) NOT NULL AFTER columntoplaceunder;

Or if you have a GUI (mysql workbench in my case) you can go to the table settings and simply drag and drop colums as you wish and click APPLY.

Answered By: Josh