#23950 closed Bug (fixed)
Adding 'deconstruct' method breaks serialization of type
Reported by: | Gavin Wahl | Owned by: | nobody |
---|---|---|---|
Component: | Migrations | Version: | 1.7 |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Ready for checkin | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
This is similar to #22951, which I think just didn't fix the problem entirely. I'm getting the same error, but in a different location, when adding a deconstruct method:
Traceback (most recent call last): File "./manage.py", line 11, in <module> execute_from_command_line(sys.argv) File "django/django/core/management/__init__.py", line 385, in execute_from_command_line utility.execute() File "django/core/management/__init__.py", line 377, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "django/core/management/base.py", line 288, in run_from_argv self.execute(*args, **options.__dict__) File "django/core/management/base.py", line 338, in execute output = self.handle(*args, **options) File "django/core/management/commands/makemigrations.py", line 124, in handle self.write_migration_files(changes) File "django/core/management/commands/makemigrations.py", line 152, in write_migration_files migration_string = writer.as_string() File "django/db/migrations/writer.py", line 131, in as_string operation_string, operation_imports = OperationWriter(operation).serialize() File "django/db/migrations/writer.py", line 88, in serialize arg_string, arg_imports = MigrationWriter.serialize(arg_value) File "django/db/migrations/writer.py", line 331, in serialize return cls.serialize_deconstructed(path, args, kwargs) File "django/db/migrations/writer.py", line 239, in serialize_deconstructed arg_string, arg_imports = cls.serialize(arg) File "django/db/migrations/writer.py", line 334, in serialize return cls.serialize_deconstructed(*value.deconstruct()) TypeError: unbound method deconstruct() must be called with FooEnum instance as first argument (got nothing instead)
Change History (8)
comment:1 by , 10 years ago
comment:2 by , 10 years ago
It happens when a class is passed to a custom field as an argument. This is used in the package django-enumfields, where the enum class is passed to EnumField. It was reported in that project as https://github.com/hzdg/django-enumfields/issues/22#issuecomment-65325260.
Here's the failing test for django: https://github.com/fusionbox/django/commit/a133c689903c8df92c6b25d3ae1b50a12bc66543
comment:3 by , 10 years ago
I was able to fix it, here's the PR: https://github.com/django/django/pull/3668
comment:4 by , 10 years ago
Has patch: | set |
---|---|
Triage Stage: | Unreviewed → Ready for checkin |
Type: | Uncategorized → Bug |
comment:5 by , 10 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Can you provide code to reproduce the error? A test for Django's test suite is ideal.