슈퍼 클래스에 대해 단 하나의 쿼리만 만든 다음 django에서 해당 하위 클래스의 목록을 모두 얻을 수 있는 방법이 있습니까?[복제하다]
-
12-12-2019 - |
문제
가능한 중복:
Django 모델 상속은 중앙 테이블을 쿼리합니다.
여기에 있는 공식 문서를 따르세요.
https://docs.djangoproject.com/en/dev/topics/db/models/#multi-table-inheritance
다음을 통해 Super of Restaurant인 장소를 쿼리할 수 있습니다.
p = Place.objects.filter(name="Bob's Cafe")
그렇다면 그 시점에서 반환된 객체가 하위 클래스 Restaurant 유형인지 확인하고 그렇다면 해당 하위 클래스 필드에 액세스할 수 있는 방법이 있습니까?
현재 내가 알 수 있는 것은 반환된 모든 개체가 Place 클래스이고 개체가 하위 클래스로 캐스팅되지 않기 때문에 해당 하위 클래스 속성과 메서드를 사용할 수 없다는 것입니다.
이 방법론이 가능하지 않은 경우 모든 하위 클래스 모델이 포함된 목록을 얻으려고 할 때 슈퍼 클래스를 추상화하고 쿼리 오버헤드를 최소화하려는 모범 사례는 무엇입니까?이론적으로는 각 하위 클래스에 대한 쿼리를 수행한 다음 목록을 결합할 수 있지만 날짜별로 해당 목록을 주문하려면 더 많은 작업을 수행해야 한다는 것을 이해합니다.
해결책
그렇다면 그 시점에서 반환된 객체가 하위 클래스 Restaurant 유형인지 확인하고 그렇다면 해당 하위 클래스 필드에 액세스할 수 있는 방법이 있습니까?
Place 모델을 쿼리한 경우 반환된 개체는 MTI 관련 하위 클래스에 대한 지식이 없는 Place 인스턴스입니다.하위 클래스에 아래쪽으로 연결하려면 슈퍼클래스에 필드를 제공해야 합니다.보다 Django에서 다중 테이블 상속 디자인을 일반화하기