나는 이런 식으로 뭔가가 :장고 : 다중 테이블 상속에 자동으로 Downcasting/다형성 테이블
내가 푸 개체가 때마다class Base(Model):
...
def downcast(self):
try:
return self.childa
except:
pass
try:
return self.childb
except:
pass
return self
class ChildA(Base):
....
class ChildB(Base):
....
class Foo(Model):
child = ForeignKey(Base)
이 자식 외래 키 항상 자료의 인스턴스를 - 나의 이해는 장고의 작동 방식 그건입니다 . 지금은 Base에 downcast() 메소드를 추가했습니다 (위 참조). 가능한 파생 형식을 하드 코딩하는 데 신경 쓰지 않습니다.
내가 원하는 것은 어떻게 든 Foo에서 그 다운 캐스트를 자동으로 중앙 집중화하는 것입니다. 이 다중 테이블 상속을 기존 코드에 추가하고 코드에 실제로 다운 캐스팅이 필요한 인스턴스를 계속 찾아서 코드에서 로컬로 수동으로 다운 캐스트해야합니다.
django-polymorphic 패키지를 사용하고 있었지만, 나에게 어떤 부작용이 있는지 알려주지 못했습니다. 어떻게 행을 삭제할 수 없는지/어떻게 처리하고 싶지는 않습니다. opts.pk에 대한 오류가 있습니다. 없음 깊은 queryset 코드.)
그래서 궁금 했어 - __init __() (기본 클래스 init 호출 한 후) 괜찮을거야? 생각하지 못한 부작용이 있습니까? 이것은 처음부터 새로운 인스턴스를 생성 할 때 문제가 될 수있는 것처럼 보입니다.
def __init__(*args, **kwargs):
super(Base, self).__init__(*arg, **kwargs)
self.child = self.child.downcast()
아이의 이름을 변경해야합니까?
class Foo(Model):
child_poly = ForeignKey(Base) # was child
@property
def child(self):
return self.child_poly.downcast()
처음부터 Foo()를 만들 때 문제가 될 수 있습니다. 나는 Foo (child = c)라고 말할 수 없다.
더 좋은 방법이 있습니까? django 디버깅을 시도하고 장고 다형성을 제거하면 삭제 문제가 해결 된 것을 발견 한 것이 아니라 일반적인 다형성 솔루션/mixin을 찾고 있지 않습니다.
어떤 장고 다형성 버전을 시도 했습니까? 이 https://github.com/chrisglass/django_polymorphic은 꽤 잘 유지되고있는 것 같습니다. 그것은 내가 당신이 발생한 문제/버그를 게시하는 것이 좋습니다. 네가 벌써했다면 사과 할께. – mtnpaul
다운 캐스팅이 필요한 경우 [InheritanceManager] (https://django-model-utils.readthedocs.org/en/latest/managers.html#inheritancemanager) 양식 django-model-utils를 사용해 볼 수 있습니다. –
django_polymorphic-0.5.tar.gz입니다. 나는 버그를 제기하지 않았다. - 좋아할 것이지만, 장고 쿼리 코드에서 스택 트레이스가 생겼다. 나는 그것을 추적하고 나는 정말로 opts.pk가 opts.pk.name에 액세스 할 때 없음이라는 것을 얻는 것을 제외하고는 무슨 일이 일어나고 있는지에 대한 적절한 설명으로 버그에 대한 정의를 할 수 있다고 생각하지 않았다. – rrauenza