4
我想模仿使用django的generic relations繼承模型。到目前爲止,這是我想出: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
的每個子類中都表現相同。
是否有一個很好的方法來封裝這個通用的功能,所以我不必複製&粘貼它爲每個子類?
我最初做到了這一點,但不喜歡模型框架建立數據庫的方式...然後,當我建立一個例子來解釋我爲什麼不接受你的答案我記得抽象基類,並在Meta類中增加了'abstract = True'屬性,它看起來很完美! –
你說得對。我其實打算加上'abstract = True',但是完全忘了。我相應地更新了我的答案。 –