【发布时间】:2012-04-30 21:15:24
【问题描述】:
在Django中,如果我做一个抽象模型类,然后有实际的派生类,只有这些类会有关联表,抽象类不能自己实例化。如果我删除 abstract=True 元信息,则会为基类创建一个实际表,但这样做允许客户端代码创建基类的对象。
有没有办法强制客户端代码总是实例化派生类,同时有一个与基类关联的表?
【问题讨论】:
-
只是在这里大声思考,但您可以有一个抽象的“模板”类,您的派生类继承它,为您提供共享抽象类来构建模型以获取表格。您的“基”类不需要声明任何其他字段。
-
@Brandon:如果我使用抽象类,那么我需要使用泛型关系。我希望我的基类有一个表,因为我想定义指向其内容的外键,而不必求助于泛型关系,但我也不希望一个纯基类被意外实例化。
-
嗯。不确定完成您需要做的事情的最佳方法是什么。
-
如果在基类上附加一个自定义 models.Manager 并“削弱”
create方法会怎样? -
@Brandon:我只是好奇。我注意到 django 做了很多魔法,所以也许有一些魔法元标志来执行我需要的东西。我认为即使在纯 python 中也不可能,除非你在
__init__中抛出异常...