我不知道如何通过ReferenceProperty的属性创建一个GqlQuery。
在这种情况下,我想获得所有座位,但按房间的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)
亚历克斯是对的,所以我决定不接触GqlQuery,并尝试使用Django模板,我找到了解决方案来排序Seat by 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>
答案 0 :(得分:0)
一般来说,要解决缺少JOIN功能的非关系数据库,你要进行非规范化;具体来说,您将数据块冗余地放在多个位置,这样就可以在查询中有效地访问它们(这确实使得更新商店更加麻烦,但是,非关系数据库通常非常倾向于阅读 - 主要是应用)。
在这种情况下,您向Seat
添加了一个房间ID的属性 - 因为您特别称为roomId
(而不是room
)参考到座位的房间,我想你的这个非规范化的位是roomIdId
。
答案 1 :(得分: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')