我已经读过https://docs.djangoproject.com/en/2.2/topics/db/models/#meta-inheritance并看到
Django确实对抽象基类的Meta类进行了一种调整:在安装Meta属性之前,它会设置
abstract=False
。这意味着抽象基类的子代本身不会自动成为抽象类。当然,您可以创建一个从另一个抽象基类继承的抽象基类。您只需要记住每次都明确设置abstract=True
。
我正在运行Django 2.2,发现从抽象模型继承的模型未将abstract
缺省为False
。随附示例代码。 app_label设置为settings.py
class Foo(models.Model):
dtm_created = models.DateTimeField(editable=False, blank=True, null=True)
dtm_updated = models.DateTimeField(editable=False, blank=True, null=True)
def save(self, *args, **kwargs):
if not self.dtm_created:
self.dtm_created = timezone.now()
self.dtm_updated = timezone.now()
return super(Core, self).save(*args, **kwargs)
class Meta:
abstract = True
app_label = 'notFoo'
class Bar(Foo):
name = models.CharField(max_length=128)
code = models.CharField(max_length=32, unique=True)
url = models.URLField(max_length=256)
运行makemigrations
返回No changes detected
。添加到Bar并运行makemigrations
可以正常运行,但不能达到预期的100%。
class Meta:
abstract = False
删除app_label = 'foo'
似乎有所不同。我认为可能是因为它设置为settings.py
中定义的应用以外的其他应用。
2.x是否存在这些已知问题或用户错误?谢谢。