Я пытаюсь эмулировать модель наследования, используя общие отношения 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
.
Есть ли хороший способ инкапсулировать эту общую функциональность, чтобы мне не приходилось копировать и вставлять ее для каждого подкласса?