Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding Autoincrement field to existing model with Django South?

I have a Django project that started as an import of a legacy database. Because of this, there is a model with a composite primary key. This worked as long as I used only the legacy data, but now I want to add new data and the form I created is telling me that I am trying to insert duplicate data, presumably because it is only looking at one of the fields as the primary key.

Now I want to change the model to use an autoincrement primary key, like one Django would automatically add. I tried removing the primary key attributes from the fields and putting them in unique_together in the Meta inner class. When I ran schemamigration with South, it wanted to add an id field as expected, but it asked for a default value.

How can I specify that South should assign unique keys in some way that is reasonable for an autoincrement field? (i.e. assign the sequence [1...n] to some arbitrary ordering of the records)

If this is impossible is there another way to accomplish the same thing, preferably using Django and South?

like image 294
murgatroid99 Avatar asked Jan 13 '12 16:01

murgatroid99


1 Answers

I solved the problem that required me to do this with a workaround:

I copied the data from the original table into a temporary table in SQL with INSERT INTO... SELECT.... I then deleted the original table and recreated it with the autoincrement field. Then I copied the data back into the new table, with the autoincrement values added automatically by the INSERT command. Finally I executed a fake run of the South migration to make South's tables consistent with the new schema.

like image 106
murgatroid99 Avatar answered Sep 28 '22 19:09

murgatroid99