Django 模型:Common Ancestor Inheritance & Migration



我想通过开发一个大规模的商业应用程序来提高Django的python游戏。我看到了对模型继承的共同祖先方法的需求,并尝试在官方文档的基础上实现它。然而,我一直收到这个非常烦人的消息,我不知道该怎么办。

  • Dj版本:Django 1.7
  • Py版本:Python 3.4.2

消息

$ python manage.py makemigrations
You are trying to add a non-nullable field 'businessentity_ptr' to business without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
 1) Provide a one-off default now (will be set on all existing rows)
 2) Quit, and let me add a default in models.py

型号.py

class BusinessEntity(models.Model):
    title = models.CharField(max_length=180)
    def __str__(self):
        return self.title

class Business(BusinessEntity):
    description = models.TextField(max_length=600)
    claimed = models.BooleanField(default=False)
    slug = models.SlugField()
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)
    def __str__(self):
        return self.description

我尝试过的(每个人都会讨厌):

  1. 删除数据库&重新迁移
  2. 为所有字段设置默认值
  3. 将所有字段设置为null = True

我已经看到了一个破解方法,但我认为这不是一个好方法。也许有人更了解Django Common Ancestors,并为我指明了正确的方向。

由于父模型是抽象的,因此应该将其标记为抽象模型。

class BusinessEntity(models.Model):
    title = models.CharField(max_length=180)
    class Meta:
        abstract = True

这防止了Django为它创建一个单独的表,因此需要一个_ptr字段从子类指向它。相反,您的子类的表将被创建为直接包括继承的字段。

最新更新