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
