diff --git a/netbox/utilities/management/commands/__init__.py b/netbox/utilities/management/commands/__init__.py index e69de29bb..697a3ed9a 100644 --- a/netbox/utilities/management/commands/__init__.py +++ b/netbox/utilities/management/commands/__init__.py @@ -0,0 +1,28 @@ +from django.db import models + + +EXEMPT_ATTRS = [ + 'choices', + 'help_text', + 'verbose_name', +] + +_deconstruct = models.Field.deconstruct + + +def custom_deconstruct(field): + """ + Imitate the behavior of the stock deconstruct() method, but ignore the field attributes listed above. + """ + name, path, args, kwargs = _deconstruct(field) + + # Remove any ignored attributes + for attr in EXEMPT_ATTRS: + kwargs.pop(attr, None) + + # A hack to accommodate TimeZoneField, which employs a custom deconstructor to check whether the default choices + # have changed + if hasattr(field, 'CHOICES'): + kwargs['choices'] = field.CHOICES + + return name, path, args, kwargs diff --git a/netbox/utilities/management/commands/makemigrations.py b/netbox/utilities/management/commands/makemigrations.py index 7ebf19748..f906feb5a 100644 --- a/netbox/utilities/management/commands/makemigrations.py +++ b/netbox/utilities/management/commands/makemigrations.py @@ -1,32 +1,6 @@ +# noinspection PyUnresolvedReferences from django.core.management.commands.makemigrations import Command from django.db import models - - -EXEMPT_ATTRS = [ - 'choices', - 'help_text', - 'verbose_name', -] - -_deconstruct = models.Field.deconstruct - - -def custom_deconstruct(field): - """ - Imitate the behavior of the stock deconstruct() method, but ignore the field attributes listed above. - """ - name, path, args, kwargs = _deconstruct(field) - - # Remove any ignored attributes - for attr in EXEMPT_ATTRS: - kwargs.pop(attr, None) - - # A hack to accommodate TimeZoneField, which employs a custom deconstructor to check whether the default choices - # have changed - if hasattr(field, 'CHOICES'): - kwargs['choices'] = field.CHOICES - - return name, path, args, kwargs - +from . import custom_deconstruct models.Field.deconstruct = custom_deconstruct diff --git a/netbox/utilities/management/commands/migrate.py b/netbox/utilities/management/commands/migrate.py new file mode 100644 index 000000000..9c2a04284 --- /dev/null +++ b/netbox/utilities/management/commands/migrate.py @@ -0,0 +1,6 @@ +# noinspection PyUnresolvedReferences +from django.core.management.commands.migrate import Command +from django.db import models +from . import custom_deconstruct + +models.Field.deconstruct = custom_deconstruct