#31167: Unable to delete or modify a constraint using model Meta
-------------------------------------+-------------------------------------
               Reporter:  BITSOLVER  |          Owner:  nobody
                   Type:             |         Status:  new
  Uncategorized                      |
              Component:             |        Version:  2.2
  Migrations                         |
               Severity:  Normal     |       Keywords:  Migrations, unique
           Triage Stage:             |      Has patch:  0
  Unreviewed                         |
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  0
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 I have the following model in a "venue" app on my project:

 {{{
 class StandardCommunityCentrePriceList(models.Model):

     class Meta:
         constraints = [
             models.UniqueConstraint(
                 fields=["customer_type", "customer"],
                 name="unique_standard_community_price_list"
             )
         ]

     customer_type = models.ForeignKey("customer.CustomerType", null=True,
 related_name="+", on_delete=CASCADE, blank=True)
     customer = models.ForeignKey("customer.Customer", null=True,
 related_name="+", on_delete=CASCADE, blank=True)
     price_type = models.CharField(max_length=6, null=False,
 choices=STANDARD_COMMUNITY_CENTRE_PRICE_TYPE_CHOICES)
     description = models.CharField(max_length=80, null=False)
     tax_inclusive = models.BooleanField(verbose_name=_("Tax Inclusive"),
 null=False,
                                         default=False)  # False means
 charges are net of tax, True means charges are inclusive of tax

     @property
     def is_hourly(self):
         return self.price_type == STANDARD_COMMUNITY_CENTRE_PRICE_HOURLY

     @property
     def is_fixed(self):
         return self.price_type == STANDARD_COMMUNITY_CENTRE_PRICE_FIXED

     def clone_price_list(self, source_id):
         source_price_list =
 StandardCommunityCentrePriceList.objects.get(id=source_id)
         for price_range in source_price_list.ranges.all():
             cloned_range =
 StandardCommunityCentrePriceRange.objects.create(
                 price_list=self,
                 effective_from_date=price_range.effective_from_date,
                 start_date=price_range.start_date,
                 end_date=price_range.end_date
             )
             cloned_range.clone_prices(price_range)

     def __str__(self):
         return "%s" % self.description
 }}}

 When I change the constraint to:

 {{{
     class Meta:
         constraints = [
             models.UniqueConstraint(
                 fields=["customer_type", "customer", "price_type"],
                 name="unique_standard_community_price_list"
             )
         ]
 }}}

 I run makemigrations venue and get:

 Output:

 {{{
 Migrations for 'venue':
   venue/migrations/0010_auto_20200114_1457.py
     - Remove constraint unique_standard_community_price_list from model
 standardcommunitycentrepricelist
     - Create constraint unique_standard_community_price_list on model
 standardcommunitycentrepricelist

 Process finished with exit code 0
 }}}

 The migration file contains:

 {{{
 # Generated by Django 2.2.9 on 2020-01-14 14:57

 from django.db import migrations, models


 class Migration(migrations.Migration):

     dependencies = [
         ('venue', '0009_auto_20190930_1440'),
     ]

     operations = [
         migrations.RemoveConstraint(
             model_name='standardcommunitycentrepricelist',
             name='unique_standard_community_price_list',
         ),
         migrations.AddConstraint(
             model_name='standardcommunitycentrepricelist',
             constraint=models.UniqueConstraint(fields=('customer_type',
 'customer', 'price_type'), name='unique_standard_community_price_list'),
         ),
     ]

 }}}


 But when I run migrate I get the following error:

 {{{
 Operations to perform:
   Apply all migrations: _holidaypark, _kennels, accommodation, admin,
 auth, auth_ext, avalonimport, bookings, breeds, captcha, configuration,
 contact, contenttypes, core, countries, customer, django_celery_beat,
 django_celery_results, emailer, entitymapper, eventlog, extras,
 holiday_dates, invoicing, ipn, notes, pets, register_customer, resources,
 sessions, statuses, supplier, task_ext, tax, venue
 Running migrations:
   Applying venue.0010_auto_20200114_1457...Traceback (most recent call
 last):
   File "/Users/steven/.virtualenvs/bookingsmanager-3.6/lib/python3.6/site-
 packages/django/db/backends/utils.py", line 84, in _execute
     return self.cursor.execute(sql, params)
 psycopg2.errors.UndefinedObject: constraint
 "unique_standard_community_price_list" of relation
 "venue_standardcommunitycentrepricelist" does not exist


 The above exception was the direct cause of the following exception:

 Traceback (most recent call last):
   File "/Users/steven/Library/Application
 Support/JetBrains/Toolbox/apps/PyCharm-P/ch-0/193.5662.61/PyCharm 2019.3
 EAP.app/Contents/plugins/python/helpers/pycharm/django_manage.py", line
 59, in <module>
     run_command()
   File "/Users/steven/Library/Application
 Support/JetBrains/Toolbox/apps/PyCharm-P/ch-0/193.5662.61/PyCharm 2019.3
 EAP.app/Contents/plugins/python/helpers/pycharm/django_manage.py", line
 46, in run_command
     run_module(manage_file, None, '__main__', True)
   File
 "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/runpy.py",
 line 205, in run_module
     return _run_module_code(code, init_globals, run_name, mod_spec)
   File
 "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/runpy.py",
 line 96, in _run_module_code
     mod_name, mod_spec, pkg_name, script_name)
   File
 "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/runpy.py",
 line 85, in _run_code
     exec(code, run_globals)
   File
 
"/Users/steven/PycharmProjects/bookingsmanager/BookingsManager/src/developer_manage.py",
 line 28, in <module>
     execute_from_command_line(sys.argv)
   File "/Users/steven/.virtualenvs/bookingsmanager-3.6/lib/python3.6/site-
 packages/django/core/management/__init__.py", line 381, in
 execute_from_command_line
     utility.execute()
   File "/Users/steven/.virtualenvs/bookingsmanager-3.6/lib/python3.6/site-
 packages/django/core/management/__init__.py", line 375, in execute
     self.fetch_command(subcommand).run_from_argv(self.argv)
   File "/Users/steven/.virtualenvs/bookingsmanager-3.6/lib/python3.6/site-
 packages/django/core/management/base.py", line 323, in run_from_argv
     self.execute(*args, **cmd_options)
   File "/Users/steven/.virtualenvs/bookingsmanager-3.6/lib/python3.6/site-
 packages/django/core/management/base.py", line 364, in execute
     output = self.handle(*args, **options)
   File "/Users/steven/.virtualenvs/bookingsmanager-3.6/lib/python3.6/site-
 packages/django/core/management/base.py", line 83, in wrapped
     res = handle_func(*args, **kwargs)
   File "/Users/steven/.virtualenvs/bookingsmanager-3.6/lib/python3.6/site-
 packages/django/core/management/commands/migrate.py", line 234, in handle
     fake_initial=fake_initial,
   File "/Users/steven/.virtualenvs/bookingsmanager-3.6/lib/python3.6/site-
 packages/django/db/migrations/executor.py", line 117, in migrate
     state = self._migrate_all_forwards(state, plan, full_plan, fake=fake,
 fake_initial=fake_initial)
   File "/Users/steven/.virtualenvs/bookingsmanager-3.6/lib/python3.6/site-
 packages/django/db/migrations/executor.py", line 147, in
 _migrate_all_forwards
     state = self.apply_migration(state, migration, fake=fake,
 fake_initial=fake_initial)
   File "/Users/steven/.virtualenvs/bookingsmanager-3.6/lib/python3.6/site-
 packages/django/db/migrations/executor.py", line 245, in apply_migration
     state = migration.apply(state, schema_editor)
   File "/Users/steven/.virtualenvs/bookingsmanager-3.6/lib/python3.6/site-
 packages/django/db/migrations/migration.py", line 124, in apply
     operation.database_forwards(self.app_label, schema_editor, old_state,
 project_state)
   File "/Users/steven/.virtualenvs/bookingsmanager-3.6/lib/python3.6/site-
 packages/django/db/migrations/operations/models.py", line 862, in
 database_forwards
     schema_editor.remove_constraint(model, constraint)
   File "/Users/steven/.virtualenvs/bookingsmanager-3.6/lib/python3.6/site-
 packages/django/db/backends/base/schema.py", line 351, in
 remove_constraint
     self.execute(sql)
   File "/Users/steven/.virtualenvs/bookingsmanager-3.6/lib/python3.6/site-
 packages/django/db/backends/base/schema.py", line 137, in execute
     cursor.execute(sql, params)
   File "/Users/steven/.virtualenvs/bookingsmanager-3.6/lib/python3.6/site-
 packages/django/db/backends/utils.py", line 99, in execute
     return super().execute(sql, params)
   File "/Users/steven/.virtualenvs/bookingsmanager-3.6/lib/python3.6/site-
 packages/django/db/backends/utils.py", line 67, in execute
     return self._execute_with_wrappers(sql, params, many=False,
 executor=self._execute)
   File "/Users/steven/.virtualenvs/bookingsmanager-3.6/lib/python3.6/site-
 packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
     return executor(sql, params, many, context)
   File "/Users/steven/.virtualenvs/bookingsmanager-3.6/lib/python3.6/site-
 packages/django/db/backends/utils.py", line 84, in _execute
     return self.cursor.execute(sql, params)
   File "/Users/steven/.virtualenvs/bookingsmanager-3.6/lib/python3.6/site-
 packages/django/db/utils.py", line 89, in __exit__
     raise dj_exc_value.with_traceback(traceback) from exc_value
   File "/Users/steven/.virtualenvs/bookingsmanager-3.6/lib/python3.6/site-
 packages/django/db/backends/utils.py", line 84, in _execute
     return self.cursor.execute(sql, params)
 django.db.utils.ProgrammingError: constraint
 "unique_standard_community_price_list" of relation
 "venue_standardcommunitycentrepricelist" does not exist

 }}}

 I am using Postgresql 9.6.10 and DJango 2.2.9 with psycopg2 2.8.4 and
 django-pg-utils 0.1.5.

-- 
Ticket URL: <https://code.djangoproject.com/ticket/31167>
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/052.107ad1e83606198f1f55f15d368261df%40djangoproject.com.

Reply via email to