#24893: Django migrations don't add unique constraint for field that is changed
from primary_key to unique
----------------------------+--------------------
     Reporter:  jbzdak      |      Owner:  nobody
         Type:  Bug         |     Status:  new
    Component:  Migrations  |    Version:  1.8
     Severity:  Normal      |   Keywords:
 Triage Stage:  Unreviewed  |  Has patch:  0
Easy pickings:  0           |      UI/UX:  0
----------------------------+--------------------
 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`.

--
Ticket URL: <https://code.djangoproject.com/ticket/24893>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/049.cc50faa7194ac20a5d89cfc8cf8baf6d%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to