|
|
@@ -0,0 +1,32 @@
|
|
|
+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
|
|
|
+
|
|
|
+
|
|
|
+models.Field.deconstruct = custom_deconstruct
|