默认情况下,何时继承的django模型未设置abstract = False?

时间:2019-04-22 03:17:27

标签: django django-models

我已经读过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)
  1. 运行makemigrations返回No changes detected。添加到Bar并运行makemigrations可以正常运行,但不能达到预期的100%。

        class Meta:
            abstract = False
    
  2. 删除app_label = 'foo'似乎有所不同。我认为可能是因为它设置为settings.py中定义的应用以外的其他应用。

2.x是否存在这些已知问题或用户错误?谢谢。

0 个答案:

没有答案