2011-10-08 4 views
1

나는 내 데이터베이스 구조에 일대 다 관계를 많이 얻었다. 예를 들어, 사용자가 많고, 학위가 많으며 이메일이 많고 계약이 많습니다.장고 : 일대 쿼리

장고의 쿼리 세트에서이 "select-related()"기능에 대해 알게되었습니다. . 그러나 그것은 "뒤로"이동하지 않습니다. 시작하는 테이블이 다른 모든 테이블에 외래 키를 가지고있을 때만 작동합니다. 일대 다일 경우 사용자의 모든 외래 키를 저장하지 않을 것입니다. 표.

그래서 제 질문은,

  1. 한 번
  2. 아직도 장고의 좋은 객체 지향 모델을 사용할 수 있도록 데이터베이스를 때려 내가 할 수있는 몇 가지 방법은 무엇인가 같은 user.degree [이상적이됩니다 0] .school_name - 이것은 굉장 할 것입니다.

어떤 도움을 크게 감상 할 수있다!

편집 1 : 흠 사실 난 그냥 기술적으로, 사용자 테이블이 어떤 필드의 이름 정도를 포함하지 않는 것을 깨달았다. 학위가 사용자와 관련되어 있다는 것을 알 수있는 유일한 방법은 학위 테이블을 살펴보고 사용자 외래 키를 찾는 것입니다. 그래서 이것은 일종의 데이터베이스 뷰와 같습니다.

편집 2 : 많은 JOIN이있는 데이터베이스에서 뷰를 생성하고 Django에서 뷰를 올바르게 미러링 할 수있는 모델을 만들 수 있습니다. ? 모든 다른 데이터베이스가 뷰에서 INSERT/UPDATE/DELETE를 처리하는 방법을 알아내는 것만으로도 목록이 있는지 확실하지 않습니다. 지금 당장 postgresql을 사용하고 있습니다.

답변

0

당신은 당신이 당신의 자신의 사용자 정의 최적화 된 SQL을 사용할 수 있습니다 django-unjoinify에서 모양과 아직 특정 모델에 결과를 매핑 할 수 있습니다. 당신이 데이터베이스 뷰를 작성하는 도로를 탈 경우

는, (나 자신을 많이 만들었으며 나는 이것이 좋은 아이디어라고 생각합니다.) 당신은 아마 실제로 쓸 수있는 모델의 save()delete(), update()과 유사한 방법을 오버라이드 (override) 각각의 테이블.

는 "오히려 레코드 당 하나 개의 쿼리보다 더 필요로하는 모든 소방 하나 개의 쿼리"고전 데이터베이스 지혜가 참입니다. 위의 두 가지 방법 모두이를 달성하는 데 도움이됩니다. 기본 DB 기능을 오버라이드 (override)에

+0

훌륭한 조언. 추가 기능을 사용하는 것보다 데이터베이스보기와 같은 표준을 사용하는 편이 낫다고 생각합니다. – reedvoid