我不知道如何让GqlQuery按照ReferenceProperty的属性排序。
在本例中,我希望获得所有的座位,但按房间的id排序
GqlQuery引用不允许连接,那么在这种情况下该如何处理呢?
class Room(db.Model):
id = db.IntegerProperty()
dimension = db.StringProperty(multiline=True)一个房间有许多座位,每个座位都有一个id。
class Seat(db.Model):
id = db.IntegerProperty()
roomId = db.ReferenceProperty(Room)
seats_query = GqlQuery("SELECT * FROM Seat ")
seats = seats_query.fetch(1000)Alex的观点是正确的,所以我决定不去接触GqlQuery,而是尝试使用Django模板,我已经找到了解决方案,可以根据房间‘id对Seat进行排序,而不必在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>发布于 2009-10-03 18:14:56
通常,要解决非关系数据库缺乏连接功能的问题,可以进行反规范化;具体地说,就是冗余地将数据片段放在多个位置,以便可以在查询中有效地访问它们(这确实会使更新存储更加麻烦,但是,非关系数据库通常严重倾向于以读取为主的应用程序)。
在本例中,您向Seat添加了一个带有房间id的属性--因为您特别地将roomId (而不是room)称为对座位的房间的引用,所以我猜您应该将这个反规范化的部分称为roomIdId。
发布于 2011-06-15 14:22:33
我认为在你的情况下,它会像你想要的那样工作:
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')https://stackoverflow.com/questions/1514450
复制相似问题