首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GqlQuery OrderBy a property in a ReferenceProperty

GqlQuery OrderBy a property in a ReferenceProperty
EN

Stack Overflow用户
提问于 2009-10-03 18:05:45
回答 2查看 464关注 0票数 1

我不知道如何让GqlQuery按照ReferenceProperty的属性排序。

在本例中,我希望获得所有的座位,但按房间的id排序

GqlQuery引用不允许连接,那么在这种情况下该如何处理呢?

代码语言:javascript
复制
class Room(db.Model):
    id = db.IntegerProperty()
    dimension = db.StringProperty(multiline=True)

一个房间有许多座位,每个座位都有一个id。

代码语言:javascript
复制
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类中添加新的字段。

如果有人感兴趣,我会把代码放在这里;))干杯;))

代码语言:javascript
复制
        {% 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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-03 18:14:56

通常,要解决非关系数据库缺乏连接功能的问题,可以进行反规范化;具体地说,就是冗余地将数据片段放在多个位置,以便可以在查询中有效地访问它们(这确实会使更新存储更加麻烦,但是,非关系数据库通常严重倾向于以读取为主的应用程序)。

在本例中,您向Seat添加了一个带有房间id的属性--因为您特别地将roomId (而不是room)称为对座位的房间的引用,所以我猜您应该将这个反规范化的部分称为roomIdId

票数 0
EN

Stack Overflow用户

发布于 2011-06-15 14:22:33

我认为在你的情况下,它会像你想要的那样工作:

代码语言:javascript
复制
class Seat(db.Model):
    id = db.IntegerProperty()
    roomId = db.ReferenceProperty(Room,collection_name='seats')

在那之后,你可以使用类似这样的东西:

代码语言:javascript
复制
rooms = Room.all().order('id')
for room in rooms:
    seat_at_room = room.seats.order('id')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1514450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档