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/3dcb255e-247c-4849-824f-ac04edf44469%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.

