我正在尝试使用 django 的通用关系来模拟继承模型。到目前为止,这就是我想出的:
class Base(models.Model):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey()
... other stuff
class Meta:
unique_together = ("content_type", "object_id")
class SubClass1(models.Model):
... properties for this class
_base = generic.GenericRelation(Base)
@property
def base(self):
return self._base.all()[0]
从您在此处看到的内容(希望如此,至少),SubClass1
应该与 具有一对一的关系Base
,这就是为什么我经历了创建该_base
字段然后用base
属性覆盖它的所有工作。拥有该通用关系将自动连接级联删除,这就是我想要的(并且我有一个post-delete
信号将从另一个方向连接删除)。
可能有任意数量的子类Base
,让我感到恶心的是必须复制和粘贴_base
及其覆盖的属性。我还有一个与此相关的自定义对象管理器,以及可能在Base
.
有没有一种很好的方法来封装这个常见的功能,所以我不必为每个子类复制和粘贴它?