Friday, 14 June 2019

No new migration for subclass of subclass of a field

I have the following setup (Django 2.0.6, also in 2.2), the first migration is with the field having max_length=64 and now I want to change the DummyCharField.max_length to 255:

class BaseDummyCharField(models.CharField):
    def __init__(self, *args, **kwargs):
        if 'max_length' not in kwargs:
            kwargs['max_length'] = 64
        super().__init__(*args, **kwargs)


class DummyCharField(BaseDummyCharField):
    def __init__(self, *args, **kwargs):
        kwargs['max_length'] = 255
        super().__init__(*args, **kwargs)


class AnotherDummyCharField(BaseDummyCharField):
    ...


class DummyModel(models.Model):
    dummy = DummyCharField()

When running makemigrations, it just says "No changes detected".

I also tried using deconstruct() as told in the docs, but it still didn't work.

class DummyCharField(BaseDummyCharField):
    def __init__(self, *args, **kwargs):
        kwargs['max_length'] = 255
        super().__init__(*args, **kwargs)

    def deconstruct(self):
        name, path, args, kwargs = super().deconstruct()
        del kwargs['max_length']
        return name, path, args, kwargs

As a workaround I made the following:

class DummyCharField(BaseDummyCharField):
    def __init__(self, *args, **kwargs):
        # If wrapped inside an `if`, it works...
        if 'max_length' not in kwargs:
            kwargs['max_length'] = 255
        ...

Am I missing something here or what exactly is my fault in this case?



from No new migration for subclass of subclass of a field

No comments:

Post a Comment