【发布时间】:2019-06-03 06:18:23
【问题描述】:
我有以下设置(Django 2.0.6,也在 2.2 中),第一次迁移是使用具有 max_length=64 的字段,现在我想将 DummyCharField.max_length 更改为 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()
在运行makemigrations 时,它只会显示“未检测到更改”。
我也尝试使用deconstruct(),如docs 中所述,但它仍然不起作用。
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
作为一种解决方法,我做了以下操作:
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
...
我在这里遗漏了什么或者在这种情况下到底是我的错吗?
【问题讨论】:
-
你做的一切都是正确的。也许你的
APP在INSTALLED_APPS中丢失了。 -
@gachdavit 我的
APP存在于INSTALLED_APPS中,初始迁移已创建,一切都已创建。如果我采用上述解决方法,也会创建新的迁移。