2009-10-03 3 views
1

ReferenceProperty의 속성에 따라 정렬하는 GqlQuery를 만드는 방법을 모르겠습니다. 이 경우GqlQuery OrderProperty의 속성을 사용하십시오.

가, 나는

가 GqlQuery 참조가 조인을 허용하지 않습니다 객실의 ID로 모든 좌석하지만 순서를 얻으려면, 그래서 당신은이 경우 접근 방법은?

class Room(db.Model): 
    id = db.IntegerProperty() 
    dimension = db.StringProperty(multiline=True) 

방은

class Seat(db.Model): 
    id = db.IntegerProperty() 
    roomId = db.ReferenceProperty(Room) 



seats_query = GqlQuery("SELECT * FROM Seat ") 
seats = seats_query.fetch(1000) 

알렉스가 바로 자신의 지점에 ID가 많은 좌석, 각이있다, 그래서 나는 GqlQuery을 터치하지 않기로 결정, 대신 장고 템플릿으로, 내가 한 재생하려고 Seat 클래스에 새로운 필드를 추가 할 필요없이 Room'id별로 Seat를 정렬하는 솔루션을 찾았습니다.)) 건배; 기능을 가입의 비 관계형 DB에 부족 해결하기 위해)) 일반적으로

 {% regroup seats|dictsort:"roomId.id" by roomId.id as room_list %} 
     <ul> 
     {% for room in room_list %} 
      <li>Room: {{room.grouper}} 
      <ul> 
      {% for item in room.list %} 
      <li>Seat no: {{item.id}} </li> 
      {% endfor %} 
      </ul> 
      </li> 
      {% endfor %} 
     </ul> 

답변

0

, 당신은 비정규

나는 누군가가 관심이있는 경우 여기에 코드를 삽입; 특히 데이터 조각을 여러 곳에 중복 배치하여 쿼리에서 효과적으로 액세스 할 수 있습니다 (이렇게하면 저장소를 업데이트하는 것이 번거로울 수 있지만 일반적으로 비 관계형 데이터베이스는 주로 읽기가 대부분입니다). 응용 프로그램). 이 경우

, 당신은 Seat 실내의 ID와 속성에 추가 - 당신이 개인적으로 (오히려 room을, 말보다) 좌석의 방에 참조roomId라고했기 때문에, 나는 생각이있을 것 비정규 화 된 비트는 roomIdId입니다.

+0

OMG를, 내 모델에 추가 데이터를 추가하지 않고 방의 이드별로 좌석을 주문할 수있는 솔루션 : -s 데이터베이스에 이미 많은 양의 데이터가 있다면 어떻게해야합니까? –

+0

@Hoang, 한 번에 N 개의 기존 좌석 모두에 필드를 추가 할 수 있습니다. 예를 들어 한 묶음 당 좌석 한 곳이 좋을 수 있습니다 (작업 대기열 사용). 일반적으로 필드별로 주문 만 할 수 있습니다. 이는 비 관계형 DB의 주요 제한 사항입니다 (확장 성 등). –

+0

안녕하세요 Alex, Django 템플릿을 사용하여 질문을 수정하여 내 문제를 해결했습니다.) 건배 –

0

나는 당신이 원하는대로 작동 할 경우 생각 :

class Seat(db.Model): 
    id = db.IntegerProperty() 
    roomId = db.ReferenceProperty(Room,collection_name='seats') 

을 그리고 그 후에는 다음과 같이 사용할 수 있습니다 :이 내가 어떤이없는 것을 의미한다

rooms = Room.all().order('id') 
for room in rooms: 
    seat_at_room = room.seats.order('id') 
관련 문제