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 django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
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.

Reply via email to