GqlQuery OrderBy свойство в ReferenceProperty - PullRequest
1 голос
/ 03 октября 2009

Я не знаю, как сделать GqlQuery для этого заказа по свойству ReferenceProperty.

В этом случае я хочу получить все место, но заказать по идентификатору комнаты

Ссылка GqlQuery не разрешает объединение, так как вы подходите в этом случае?

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)

Алекс совершенно прав, поэтому я решил не трогать GqlQuery и попытался поиграть с шаблоном Django, вместо этого я нашел решение сортировать Seat по Room'id без добавления нового поля в классе Seat.

Я поставлю код здесь, если у кого-то есть интересы;)) Ура!))

        {% 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>

Ответы [ 2 ]

0 голосов
/ 15 июня 2011

Я думаю, в вашем случае это будет работать так, как вы хотите:

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')
0 голосов
/ 03 октября 2009

В общем, для обхода нереляционных БД с отсутствием функциональности JOIN, вы денормализуете; в частности, вы избыточно размещаете фрагменты данных в более чем одном месте, чтобы к ним можно было эффективно обращаться в ваших запросах (это делает более сложным обновление вашего хранилища, но в то же время нереляционные БД в целом сильно склоняются к чтению в основном приложения).

В этом случае вы добавляете к Seat свойство с идентификатором комнаты - поскольку вы специально назвали roomId (вместо, скажем, room) ссылку на место номер, я думаю, у вас будет этот денормализованный бит как roomIdId.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...