[Django] #31186: Error updating unique field

20 views
Skip to first unread message

Django

unread,
Jan 20, 2020, 10:39:03 AM1/20/20
to django-...@googlegroups.com
#31186: Error updating unique field
-------------------------------------+-------------------------------------
Reporter: Kailegh | Owner: nobody
Type: | Status: new
Uncategorized |
Component: | Version: 2.2
Migrations | Keywords: migration,
Severity: Normal | TextField, CharField
Triage Stage: | Has patch: 0
Unreviewed |
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-------------------------------------+-------------------------------------
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!!

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

Django

unread,
Jan 20, 2020, 2:36:50 PM1/20/20
to django-...@googlegroups.com
#31186: Error updating unique field
-------------------------------------+-------------------------------------
Reporter: Kailegh | Owner: nobody
Type: Bug | Status: new
Component: Migrations | Version: 2.2
Severity: Normal | Resolution:
Keywords: migration, | Triage Stage:
TextField, CharField | Unreviewed
Has patch: 0 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by felixxm):

* type: Uncategorized => Bug


Old description:

New description:

--

--
Ticket URL: <https://code.djangoproject.com/ticket/31186#comment:1>

Django

unread,
Jan 21, 2020, 3:52:20 AM1/21/20
to django-...@googlegroups.com
#31186: Migration crash when changing CharField to TextField and removing related
unique constraint on MySQL.

-------------------------------------+-------------------------------------
Reporter: Kailegh | Owner: nobody
Type: Bug | Status: closed
Component: Migrations | Version: master
Severity: Normal | Resolution: wontfix

Keywords: migration, | Triage Stage:
TextField, CharField | Unreviewed
Has patch: 0 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by felixxm):

* cc: Markus Holtermann (added)
* status: new => closed
* version: 2.2 => master
* resolution: => wontfix


Comment:

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
`TextField` to `CharField` and adding `unique_together`) the operations'
order is correct, `AlterField` and `AlterUniqueTogether`.

--
Ticket URL: <https://code.djangoproject.com/ticket/31186#comment:2>

Reply all
Reply to author
Forward
0 new messages