Starting with the below minimal example
```
from django.db import models
class Foo(models.Model):
code = models.CharField(max_length=15, primary_key=True, unique=True,
auto_created=False, editable=False)
name = models.CharField(max_length=100)
class Bar(models.Model):
foos = models.ManyToManyField(Foo)
```
Run `./manage.py makemigrations` then `./manage.py migrate`.
Change the `max_length` of `Foo.code` to a higher value e.g. 100
```
from django.db import models
class Foo(models.Model):
code = models.CharField(max_length=100, primary_key=True, unique=True,
auto_created=False, editable=False)
name = models.CharField(max_length=100)
class Bar(models.Model):
foos = models.ManyToManyField(Foo)
```
Run `./manage.py makemigrations` then `./manage.py migrate` once more.
The final `myapp_bar_foos` table DDL is:
```
CREATE TABLE "myapp_bar_foos" ("id" integer NOT NULL PRIMARY KEY
AUTOINCREMENT, "bar_id" integer NOT NULL REFERENCES "myapp_bar" ("id"),
"foo_id" varchar(15) NOT NULL REFERENCES "myapp_foo" ("code"));
CREATE UNIQUE INDEX "myapp_bar_foos_bar_id_foo_id_6037806e_uniq" ON
"myapp_bar_foos" ("bar_id", "foo_id");
CREATE INDEX "myapp_bar_foos_bar_id_f5103189" ON "myapp_bar_foos"
("bar_id");
CREATE INDEX "myapp_bar_foos_foo_id_84900b21" ON "myapp_bar_foos"
("foo_id")
```
The `foo_id` column should have been updated to type `varchar(100)` but it
remains as `varchar(15)`.
The problem is not noticeable when using SQLite (e.g. during local
development), as SQLite doesn't seem to enforce the varchar length
constraints, but Postgres does, so this issue is pernicious when moving to
production.
--
Ticket URL: <https://code.djangoproject.com/ticket/28193>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
Ticket URL: <https://code.djangoproject.com/ticket/28193#comment:1>
* keywords: => manytomanyfield, primary key, varchar, max length
* type: Uncategorized => Bug
--
Ticket URL: <https://code.djangoproject.com/ticket/28193#comment:2>
Old description:
New description:
--
Comment (by James Hiew):
Fix formatting
--
Ticket URL: <https://code.djangoproject.com/ticket/28193#comment:3>
* status: new => closed
* stage: Unreviewed => Accepted
* resolution: => duplicate
Comment:
Duplicate of #24954 and #25012.
--
Ticket URL: <https://code.djangoproject.com/ticket/28193#comment:4>
* stage: Accepted => Unreviewed
--
Ticket URL: <https://code.djangoproject.com/ticket/28193#comment:5>