CategoryField.__init__() has lines like kwargs['max_length'] = self.max_length
That's going to ignore any custom max_length that you provide in the model field's definition, hence those changes aren't detected in migrations. On Tuesday, March 14, 2017 at 2:09:12 AM UTC-4, 김지환 wrote: > > CategoryField subclassed CharField, so I think I don't need to add > deconstruct method in CategoryField. > > And, when call CategoryField().deconstruct(), the values return correctly. > > Why django makemigrations cannot detect max_length and choices change? > > > > > 2017년 3월 13일 월요일 오후 10시 43분 53초 UTC+9, Tim Graham 님의 말: >> >> 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/b900960b-272f-49e7-898f-72193f0866ab%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.

