#34820: Change the properties of ForeignObject object, such as blank, null, and
execute migrate to report an error
-------------------------------------+-------------------------------------
     Reporter:  RelaxedDong          |                    Owner:  nobody
         Type:  Bug                  |                   Status:  new
    Component:  Database layer       |                  Version:  4.2
  (models, ORM)                      |
     Severity:  Normal               |               Resolution:
     Keywords:                       |             Triage Stage:
                                     |  Unreviewed
    Has patch:  1                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Description changed by RelaxedDong:

Old description:

> … execute migrate to report an error
>
> If the models.ForeignObject attribute is used, changing null or blank to
> generate a new migration record will result in an error message when
> executing the migrate again
>
> ```
>   File "/Users/donghao/test/test_migations/manage.py", line 22, in
> <module>
>     execute_from_command_line(sys.argv)
>   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
> packages/django/core/management/__init__.py", line 442, in
> execute_from_command_line
>     utility.execute()
>   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
> packages/django/core/management/__init__.py", line 436, in execute
>     self.fetch_command(subcommand).run_from_argv(self.argv)
>   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
> packages/django/core/management/base.py", line 412, in run_from_argv
>     self.execute(*args, **cmd_options)
>   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
> packages/django/core/management/base.py", line 458, in execute
>     output = self.handle(*args, **options)
>   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
> packages/django/core/management/base.py", line 106, in wrapper
>     res = handle_func(*args, **kwargs)
>   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
> packages/django/core/management/commands/migrate.py", line 356, in handle
>     post_migrate_state = executor.migrate(
>   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
> packages/django/db/migrations/executor.py", line 135, in migrate
>     state = self._migrate_all_forwards(
>   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
> packages/django/db/migrations/executor.py", line 167, in
> _migrate_all_forwards
>     state = self.apply_migration(
>   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
> packages/django/db/migrations/executor.py", line 252, in apply_migration
>     state = migration.apply(state, schema_editor)
>   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
> packages/django/db/migrations/migration.py", line 132, in apply
>     operation.database_forwards(
>   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
> packages/django/db/migrations/operations/fields.py", line 235, in
> database_forwards
>     schema_editor.alter_field(from_model, from_field, to_field)
>   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
> packages/django/db/backends/base/schema.py", line 785, in alter_field
>     if not self._field_should_be_altered(old_field, new_field):
>   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
> packages/django/db/backends/base/schema.py", line 1530, in
> _field_should_be_altered
>     return self.quote_name(old_field.column) != self.quote_name(
>   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
> packages/django/db/backends/base/schema.py", line 204, in quote_name
>     return self.connection.ops.quote_name(name)
>   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
> packages/django/db/backends/mysql/operations.py", line 184, in quote_name
>     if name.startswith("`") and name.endswith("`"):
> AttributeError: 'NoneType' object has no attribute 'startswith'
> ```
>
> A pre judgment has been added here to avoid this issue

New description:

 Execute migrate to report an error

 If the models.ForeignObject attribute is used, changing null or blank to
 generate a new migration record will result in an error message when
 executing the migrate again



 {{{
 File "/Users/donghao/test/test_migations/manage.py", line 22, in <module>
     execute_from_command_line(sys.argv)
   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
 packages/django/core/management/__init__.py", line 442, in
 execute_from_command_line
     utility.execute()
   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
 packages/django/core/management/__init__.py", line 436, in execute
     self.fetch_command(subcommand).run_from_argv(self.argv)
   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
 packages/django/core/management/base.py", line 412, in run_from_argv
     self.execute(*args, **cmd_options)
   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
 packages/django/core/management/base.py", line 458, in execute
     output = self.handle(*args, **options)
   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
 packages/django/core/management/base.py", line 106, in wrapper
     res = handle_func(*args, **kwargs)
   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
 packages/django/core/management/commands/migrate.py", line 356, in handle
     post_migrate_state = executor.migrate(
   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
 packages/django/db/migrations/executor.py", line 135, in migrate
     state = self._migrate_all_forwards(
   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
 packages/django/db/migrations/executor.py", line 167, in
 _migrate_all_forwards
     state = self.apply_migration(
   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
 packages/django/db/migrations/executor.py", line 252, in apply_migration
     state = migration.apply(state, schema_editor)
   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
 packages/django/db/migrations/migration.py", line 132, in apply
     operation.database_forwards(
   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
 packages/django/db/migrations/operations/fields.py", line 235, in
 database_forwards
     schema_editor.alter_field(from_model, from_field, to_field)
   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
 packages/django/db/backends/base/schema.py", line 785, in alter_field
     if not self._field_should_be_altered(old_field, new_field):
   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
 packages/django/db/backends/base/schema.py", line 1530, in
 _field_should_be_altered
     return self.quote_name(old_field.column) != self.quote_name(
   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
 packages/django/db/backends/base/schema.py", line 204, in quote_name
     return self.connection.ops.quote_name(name)
   File "/Users/donghao/.virtualenvs/simpleui/lib/python3.9/site-
 packages/django/db/backends/mysql/operations.py", line 184, in quote_name
     if name.startswith("`") and name.endswith("`"):
 AttributeError: 'NoneType' object has no attribute 'startswith'
 }}}

--

-- 
Ticket URL: <https://code.djangoproject.com/ticket/34820#comment:1>
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 django-updates+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/0107018a735bd96a-a6bf43af-485b-411e-b193-ab1f13e15193-000000%40eu-central-1.amazonses.com.

Reply via email to