﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
24893	Django migrations don't add unique constraint for field that is changed from primary_key to unique	Jacek Bzdak	Tim Graham	"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_pk` to 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`. "	Bug	closed	Migrations	1.8	Release blocker	fixed			Accepted	1	0	0	0	0	0
