2

我正在尝试一个简单的模型继承:

class Product(models.Model):
    creation_date = models.DateTimeField(auto_now_add=True)

class Application(Product):
    name = models.CharField(max_length=200)

'makemigrations' 要求默认值:

您正在尝试在没有默认值的情况下向应用程序添加不可为空的字段“product_ptr”;我们不能这样做(数据库需要一些东西来填充现有的行)。

我在这里看到我可以用 Meta 类生产一个抽象模型,但我不能这样做,因为我在其他模型中专门将它引用为实际模型:

class Comment(models.Model):
    product      = models.ForeignKey('Product', related_name="comments")

删除数据库时运行“makemigrations”也会导致同样的问题。

有什么我能做的吗?

姜戈 1.9

4

1 回答 1

2

您还没有解释您所做的更改究竟是什么,似乎您已将Application模型更改为从Product之前从models.Model继承的位置继承。这导致 django 在幕后创建 1 对 1 映射。自己没有添加到模型中的product_ptr的添加进入图片

参考:https ://docs.djangoproject.com/en/1.9/topics/db/models/#multi-table-inheritance

继承关系引入了子模型与其每个父模型之间的链接(通过自动创建的 OneToOneField)。

在迁移期间将此字段添加到包含数据的表中有点棘手,因为此字段需要是唯一的。如果您只是创建一个名为 的新模型Application,则值 1 就可以了。

于 2016-06-16T11:07:50.673 回答