4
django의 generic relations을 사용하여 상속 모델을 에뮬레이션하려고합니다. 지금까지, 이것은 내가 가지고 올 한 것입니다 :django 일반적인 일대일 릴레이션, 계단식 삭제 포함
당신의SubClass1
이유 인
Base
과 일대일 관계를 가져야한다 (적어도, 희망) 여기에서 무엇을 볼 수에서
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]
그 _base
필드를 만들고 나서 base
속성으로 덮는 작업을 모두 마쳤습니다. 그 일반적인 관계를 갖는 것은 자동적으로 필자가 원하는 계단식 삭제를 연결합니다 (그리고 나는 다른 방향에서 삭제를 연결하는 post-delete
신호를가집니다).
Base
의 하위 클래스가있을 수 있으며 &과 그 덮음 속성을 붙여 넣으려고 총체적인 느낌이 들게합니다. 나는 또한 이것과 함께 움직이는 커스텀 오브젝트 매니저와 Base
의 각 서브 클래스 내에서 모두 똑같이 행동해야만하는 다른 것들을 가지고있다.
일반적인 기능을 캡슐화하는 데 좋은 방법이 있습니까? &을 각 하위 클래스에 붙여 넣을 필요가 없습니다.
처음에는 이것을했지만 모델 프레임 워크가 데이터베이스를 구축하는 방식을 좋아하지 않았습니다 ... 그렇다면 내가 받아들이지 않을 이유를 설명하기 위해 예제를 작성하는 동안 당신의 대답은 추상 기본 클래스에 대해 기억하고'meta ='클래스에'abstract = True' 속성을 추가 했으니 완벽 해 보입니다! –
당신 말이 맞아요. 실제로'abstract = True'를 추가하려고했지만 완전히 잊어 버렸습니다. 그에 따라 위의 답변을 업데이트했습니다. –