Google App Engine Datastore 쿼리에서 참조 된 객체를 어떻게 주문합니까?
-
22-08-2019 - |
문제
나는 가지고있다 Exhibit
참조하는 개체 Gallery
둘 다 Google App Engine Datastore에 저장됩니다.
어떻게 주문합니까? Exhibit
각각의 수집 Gallery
값을 반복 할 때 (궁극적으로 Django 템플릿에서) 객체?
즉 이것은 작동하지 않습니다
class Gallery(db.Model):
title = db.StringProperty()
position = db.IntegerProperty()
class Exhibit(db.Model):
gallery = db.ReferenceProperty(Gallery, collection_name='exhibits')
title = db.StringProperty()
position = db.IntegerProperty()
galleries = db.GqlQuery('SELECT * FROM Gallery ORDER BY position')
for gallery in galleries:
gallery.exhibits.order('position')
# ... send galleries off the the Django template
템플릿에 렌더링되면 갤러리가 올바르게 주문되지만 전시회는 그렇지 않습니다.
해결책
App Engine이 생성하는 컬렉션 속성에 의존하는 대신 자신의 쿼리를 구성해야합니다.
Exhibits = Exhibit.all (). 필터 ( "Gallery =", Gallery) .Order ( "위치")
또는 동등하게, GQL에서 :
전시회 = db.gqlquery ( "갤러리에서 1 : 1 순서별로 전시회에서 선택 * *, 갤러리)
전시 목록 목록을 전달하지 않고 템플릿 내부 에서이 작업을 수행하려면이 쿼리를 실행하는 갤러리 객체에서 간단한 메소드를 정의하고 템플릿에서 참조 할 수 있습니다 (예 : , {{gallery.exhibits_by_position}}은 Gallery 객체에서 Exhibits_by_position ()을 실행 한 다음 위의 쿼리를 수행 할 수 있음).
이의 속도에 대해 걱정하는 경우 걱정하지 마십시오. App Engine이 작성하는 컬렉션 속성은 단순히 이에 대한 구문 설탕입니다.
제휴하지 않습니다 StackOverflow