#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.

Reply via email to