It looks like you need to add a CategoryField.deconstruct() method. https://docs.djangoproject.com/en/stable/howto/custom-model-fields/#custom-field-deconstruct-method
On Monday, March 13, 2017 at 8:05:02 AM UTC-4, 김지환 wrote: > > # 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? > > > > > > > > -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/2894bc7f-d561-4ae1-96d8-c2c2203cab7d%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.

