Opened 6 years ago
Closed 6 years ago
#31186 closed Bug (wontfix)
Migration crash when changing CharField to TextField and removing related unique constraint on MySQL.
| Reported by: | Kailegh | Owned by: | nobody |
|---|---|---|---|
| Component: | Migrations | Version: | dev |
| Severity: | Normal | Keywords: | migration, TextField, CharField |
| Cc: | Markus Holtermann | 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 )
Hi, I think I have discovered a bug, if you have a field like the following:
audio_name = models.CharField(blank=False, max_length=255)
and decide to change it to the following one:
audio_name = models.TextField(blank=False)
it generates the following migration code:
operations = [
migrations.AlterModelOptions(
name='s3_bucket_audios',
options={},
),
migrations.AlterField(
model_name='s3_bucket_audios',
name='audio_name',
field=models.TextField(help_text='name of the audio in the s3 bucket'),
),
migrations.AlterUniqueTogether(
name='s3_bucket_audios',
unique_together=set(),
),
]
However it that field was being use in a unique condition:
class Meta:
ordering = [ "audio_name"]
unique_together = ('audio_name')
you get the following error:
django.db.utils.OperationalError: (1170, "BLOB/TEXT column 'audio_name' used in key specification without a key length")
That is because it changes the field type before changing the unique condition, I think the order should be handled automatically, I had to change the code manually to:
operations = [
migrations.AlterModelOptions(
name='s3_bucket_audios',
options={},
),
migrations.AlterUniqueTogether(
name='s3_bucket_audios',
unique_together=set(),
),
migrations.AlterField(
model_name='s3_bucket_audios',
name='audio_name',
field=models.TextField(help_text='name of the audio in the s3 bucket'),
),
]
It is not a big issue anyway...
Thanks a lot for your amazing work!!
Change History (2)
comment:1 by , 6 years ago
| Description: | modified (diff) |
|---|---|
| Type: | Uncategorized → Bug |
comment:2 by , 6 years ago
| Cc: | added |
|---|---|
| Resolution: | → wontfix |
| Status: | new → closed |
| Summary: | Error updating unique field → Migration crash when changing CharField to TextField and removing related unique constraint on MySQL. |
| Version: | 2.2 → master |
Thanks for this report, however this is a MySQL caveat and I don't think we can detect that correctly. In the reverse direction (i.e. changing
TextFieldtoCharFieldand addingunique_together) the operations' order is correct,AlterFieldandAlterUniqueTogether.