#35038: Changing violation_error_message on constraints cause a remove/add
operation in migration
------------------------------------------------+------------------------
Reporter: David | Owner: nobody
Type: Cleanup/optimization | Status: new
Component: Migrations | Version: 4.1
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
------------------------------------------------+------------------------
Changing the `violation_error_message` of a constraint and running
`makemigrations` causes the migration to be written with two operations
`RemoveConstraint` and `AddConstraint `.
Suppose we start with this situation:
{{{
#!python
from django.db import models
class MyModel(models.Model):
counter = models.IntegerField(defalt=0)
max_value = models.IntegerField(defalt=0)
name = models.CharField(max_length=4)
class Meta:
constraints = (
models.CheckConstraint(
check=models.Q(counter__gte=models.F('max_value')),
name='counter_lower_than_max',
),
models.UniqueConstraint(
fields=('name', 'max_value')
name='uniq_name_and_max',
),
)
}}}
If we add a custom `violation_error_message` and run `makemigrations` it
will output
{{{
$ ./manage.py makemigrations mysample -n update_violation_msgs
Migrations for 'mysample':
mysample/migrations/0002_update_violation_msgs.py
- Remove constraint counter_lower_than_max from model mymodel
- Create constraint counter_lower_than_max on model mymodel
- Remove constraint uniq_name_and_maxfrom model mymodel
- Create constraint uniq_name_and_maxon model mymodel
}}}
This will cause the database tu run useless commands, since nothing on
database side has changed!
This may be a particular problem when applied to `UniqueConstraint`s since
the database needs to destroy and re-create an index.
--
Ticket URL: <https://code.djangoproject.com/ticket/35038>
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 view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/0107018c689f58c7-9684fa25-af47-437d-a4e1-e1f5d5f8d4fa-000000%40eu-central-1.amazonses.com.