#24893 closed Bug (fixed)
Django migrations don't add unique constraint for field that is changed from primary_key to unique
| Reported by: | Jacek Bzdak | Owned by: | Tim Graham | 
|---|---|---|---|
| Component: | Migrations | Version: | 1.8 | 
| Severity: | Release blocker | Keywords: | |
| Cc: | Triage Stage: | Accepted | |
| Has patch: | yes | Needs documentation: | no | 
| Needs tests: | no | Patch needs improvement: | no | 
| Easy pickings: | no | UI/UX: | no | 
Description (last modified by )
This is related to #24892 and uses the same code (I have attached sample project there)
Copy-pasted description of problem: 
To cut long story short: in a small application I had models using domain level primary keys, that were strings, I wanted to introduce synthetic primary keys.
Here are models before migration (I have updated
int_pkto be unique).
class Foo(models.Model): string_pk = models.CharField( max_length=10, primary_key= True ) int_pk = models.IntegerField( null=True ) class Meta: db_table = "FOO"Models after migration:
class Foo(models.Model): string_pk = models.CharField( max_length=10, unique = True ) int_pk = models.AutoField( primary_key=True ) class Meta: db_table = "FOO"Generated migration:
class Migration(migrations.Migration): dependencies = [ ('testapp', '0002_foo_int_pk'), ] operations = [ migrations.AlterField( model_name='foo', name='int_pk', field=models.AutoField(primary_key=True, serialize=False), ), migrations.AlterField( model_name='foo', name='string_pk', field=models.CharField(max_length=10, unique=True), ), ]
I have changed field string_pk from primary_key=True to unique=True, generated migration (when I manually fixed error from #24892) didn't create unique constraint (previously there were a primary key constraint, that was dropped but there were no unique key generated). 
This can be worked-around by generating another migration with two migrations.AlterField one that sets unique=False and another that sets unique=True. 
Change History (5)
comment:1 by , 10 years ago
| Description: | modified (diff) | 
|---|
comment:2 by , 10 years ago
| Owner: | changed from to | 
|---|---|
| Severity: | Normal → Release blocker | 
| Status: | new → assigned | 
| Triage Stage: | Unreviewed → Accepted | 
comment:3 by , 10 years ago
| Has patch: | set | 
|---|
PR