# category.py
from django.db.models.fields import CharField
class CategoryField(CharField):
verbose_name = "category"
max_length = 40
NORMAL = 'normal'
PUBLIC = 'public'
choices = (
(NORMAL, "normal"),
(PUBLIC, "public),
)
def __init__(self, *args, **kwargs):
kwargs['max_length'] = self.max_length
kwargs['choices'] = self.choices
kwargs['verbose_name'] = self.verbose_name
kwargs['blank'] = True
kwargs['null'] = True
kwargs['default'] = self.NORMAL
super().__init__(*args, **kwargs)
# in my models.py
class Car(models.Model):
category = CategoryField()
When I use custom field overriding django CharField, field changes that `max_length`, `choices` not detected by django makemigrations command.
Add field migration works fine, and verbose_name, blank, null changes are detected by makemigrations command.
However, when I change max_length and choices, django makemigrations cannot detect changes.
I checked return value of my CategoryField's deconstruct method, and the result is fine.
Also, if max_length is set like `CategoryField(max_length=50)`, makemigrations can detect changes.
Why django makemigrations cannot detect changes when set max_length and choices in __init__ method?