#25105: Migrating multiple CharFields to null=False breaks on PostgreSQL
----------------------------+------------------------------------
     Reporter:  danielr     |                    Owner:  nobody
         Type:  Bug         |                   Status:  new
    Component:  Migrations  |                  Version:  1.8
     Severity:  Normal      |               Resolution:
     Keywords:              |             Triage Stage:  Accepted
    Has patch:  0           |      Needs documentation:  0
  Needs tests:  0           |  Patch needs improvement:  0
Easy pickings:  0           |                    UI/UX:  0
----------------------------+------------------------------------

Comment (by danielr):

 On further investigation, in turns out that a) you do need at least two
 fields being migrated, and b) you also need a {{{ForeignKey}}}, which is
 why Zanuda999 couldn't replicate it. So, given these models:

 {{{
 class Model1(models.Model):
     field1 = models.CharField(max_length=20)

 class Model2(models.Model):
     field1 = models.CharField(max_length=20, blank=True, null=True)
     field2 = models.CharField(max_length=20, blank=True, null=True)
     model1 = models.ForeignKey(Model1)
 }}}

 Create and run the migrations, then in the shell:

 {{{
 >>> m=Model1.objects.create(field1='foo')
 >>> Model2.objects.create(model1=m)
 }}}

 Now, delete the {{{null=True}}} from Model2.field1 and field2, and create
 migrations again, using a one-off default of {{{''}}} for both fields.
 Running migrations now produces this error:

 {{{
 Running migrations:
   Rendering model states... DONE
   Applying null_to_blank.0002_auto_20150711_1244...Traceback (most recent
 call last):
   File "./manage.py", line 10, in <module>
     execute_from_command_line(sys.argv)
   File
 "/Users/danielroseman/Projects/django/django/core/management/__init__.py",
 line 331, in execute_from_command_line
     utility.execute()
   File
 "/Users/danielroseman/Projects/django/django/core/management/__init__.py",
 line 323, in execute
     self.fetch_command(subcommand).run_from_argv(self.argv)
   File
 "/Users/danielroseman/Projects/django/django/core/management/base.py",
 line 350, in run_from_argv
     self.execute(*args, **cmd_options)
   File
 "/Users/danielroseman/Projects/django/django/core/management/base.py",
 line 401, in execute
     output = self.handle(*args, **options)
   File
 
"/Users/danielroseman/Projects/django/django/core/management/commands/migrate.py",
 line 195, in handle
     executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial)
   File
 "/Users/danielroseman/Projects/django/django/db/migrations/executor.py",
 line 110, in migrate
     self.apply_migration(states[migration], migration, fake=fake,
 fake_initial=fake_initial)
   File
 "/Users/danielroseman/Projects/django/django/db/migrations/executor.py",
 line 148, in apply_migration
     state = migration.apply(state, schema_editor)
   File
 "/Users/danielroseman/Projects/django/django/db/migrations/migration.py",
 line 116, in apply
     operation.database_forwards(self.app_label, schema_editor, old_state,
 project_state)
   File
 
"/Users/danielroseman/Projects/django/django/db/migrations/operations/fields.py",
 line 201, in database_forwards
     schema_editor.alter_field(from_model, from_field, to_field)
   File
 "/Users/danielroseman/Projects/django/django/db/backends/base/schema.py",
 line 482, in alter_field
     old_db_params, new_db_params, strict)
   File
 "/Users/danielroseman/Projects/django/django/db/backends/base/schema.py",
 line 654, in _alter_field
     params,
   File
 "/Users/danielroseman/Projects/django/django/db/backends/base/schema.py",
 line 110, in execute
     cursor.execute(sql, params)
   File "/Users/danielroseman/Projects/django/django/db/backends/utils.py",
 line 79, in execute
     return super(CursorDebugWrapper, self).execute(sql, params)
   File "/Users/danielroseman/Projects/django/django/db/backends/utils.py",
 line 64, in execute
     return self.cursor.execute(sql, params)
   File "/Users/danielroseman/Projects/django/django/db/utils.py", line 95,
 in __exit__
     six.reraise(dj_exc_type, dj_exc_value, traceback)
   File "/Users/danielroseman/Projects/django/django/db/backends/utils.py",
 line 64, in execute
     return self.cursor.execute(sql, params)
 django.db.utils.OperationalError: cannot ALTER TABLE
 "null_to_blank_model2" because it has pending trigger events
 }}}

--
Ticket URL: <https://code.djangoproject.com/ticket/25105#comment:3>
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 post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/065.c94cad9fc4e755a9c906f336486e8abc%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to