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.

Reply via email to