Просмотр исходного кода

Closes #2359: Implement custom makemigrations command to ignore extraneous field attributes

Jeremy Stretch 7 лет назад
Родитель
Сommit
7ec4155845

+ 0 - 0
netbox/utilities/management/__init__.py


+ 0 - 0
netbox/utilities/management/commands/__init__.py


+ 32 - 0
netbox/utilities/management/commands/makemigrations.py

@@ -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