Opened 9 years ago
Closed 9 years ago
#27456 closed Bug (worksforme)
Changing the unique parameter from True to False has no effect on MySQL
| Reported by: | Vadim | Owned by: | nobody |
|---|---|---|---|
| Component: | Migrations | Version: | 1.8 |
| Severity: | Normal | Keywords: | mysql |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description (last modified by )
Steps to reproduce:
- Create a model:
from django.db import models
class TestModel(models.Model):
name = models.CharField(max_length=100, unique=True)
surname = models.CharField(max_length=50)
- makemigrations && migrate
$ ./manage.py sqlmigrate testapp 0001_initial BEGIN; CREATE TABLE `testapp_testmodel` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(100) NOT NULL UNIQUE, `surname` varchar(50) NOT NULL); COMMIT;
$ cat testapp/migrations/0001_initial.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
]
operations = [
migrations.CreateModel(
name='TestModel',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('name', models.CharField(unique=True, max_length=100)),
('surname', models.CharField(max_length=50)),
],
),
]
- Set unique to False
from django.db import models
class TestModel(models.Model):
name = models.CharField(max_length=100, unique=False)
surname = models.CharField(max_length=50)
- makemigrations && migrate
- Result is:
$ cat testapp/migrations/0002_auto_20161106_2004.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('testapp', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='testmodel',
name='name',
field=models.CharField(max_length=100),
),
]
$ ./manage.py sqlmigrate testapp 0002_auto_20161106_2004
mysql> show create table testapp_testmodel; +-------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | testapp_testmodel | CREATE TABLE `testapp_testmodel` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL, `surname` varchar(50) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | +-------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0,00 sec)
Notes:
It works well on SQLite
This bug also exists in 1.10
Change History (5)
comment:1 by , 9 years ago
| Summary: | Changing the unique paramater from True to False has no effect on MySQL → Changing the unique parameter from True to False has no effect on MySQL |
|---|
follow-up: 4 comment:2 by , 9 years ago
comment:3 by , 9 years ago
| Description: | modified (diff) |
|---|
comment:4 by , 9 years ago
Replying to Shai Berger:
According to the description, after creating the second migration you only ran the
sqlmigratecommand, notmigrate. Is the error in your process or your ticket description?
It was an error in my description. I updated it. Thank you!
comment:5 by , 9 years ago
| Resolution: | → worksforme |
|---|---|
| Status: | new → closed |
I can't reproduce a problem. There's also a test in schema/tests.py that seems to cover this case. Please provide a test case or point out where Django is at fault.
According to the description, after creating the second migration you only ran the
sqlmigratecommand, notmigrate. Is the error in your process or your ticket description?