﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
35038	Changing violation_error_message on constraints cause a remove/add operation in migration	David	Salvo Polizzi	"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."	Cleanup/optimization	closed	Migrations	4.1	Normal	fixed		Adrienne Franke	Ready for checkin	1	0	0	0	0	0
