下面是python代码,我试图从预订模型中获取预订信息。
i=0
for c in courts:
court = names[i]
i=i+1
c_key=c.key()
logging.info("c_key: %s " % c_key)
weekday_key= db.Key.from_path('Courts', 'c_key', 'Days', weekday)
logging.info("weekday_key: %s " % weekday_key)
logging.info("weekday: %s " % weekday)
logging.info("court: %s " % court)
reservation = db.Query(Reservations)
nlimit=2*len(times)
reservations = reservation.fetch(limit=nlimit)
logging.info("reservations: %s " % len(reservations))
我的法院数据库中只有两个法院实体,即court1和court2。
我的Days数据库中只有14个工作日实体,court1为7,court2为7,命名为Sunday,...,Saturday。在当前的例子中,我试图获得2个星期一的关键,一个用于court1,一个用于court2。
我不明白为什么根据下面的日志,我对两个不同的法院weekday_key
有不同的c_key
。
在下面的日志中,无论我输入db.Key.from_path(
命令'c_key'还是'court',我都得到完全相同的结果,这表明2 weekday_key
s的值是相同的,没有像我预期的那样不同。
INFO 2012-09-10 21:25:19,189 views.py:226] c_key: ag1kZXZ-c2NoZWR1bGVycicLEglMb2NhdGlvbnMiBlJvZ2VycwwLEgZDb3VydHMiBmNvdXJ0MQw
INFO 2012-09-10 21:25:19,189 views.py:228] weekday_key: ag1kZXZ-c2NoZWR1bGVyciELEgZDb3VydHMiBWNfa2V5DAsSBERheXMiBk1vbmRheQw
INFO 2012-09-10 21:25:19,189 views.py:229] weekday: Monday
INFO 2012-09-10 21:25:19,189 views.py:230] court: court1
INFO 2012-09-10 21:25:19,192 views.py:235] reservations: 1
INFO 2012-09-10 21:25:19,192 views.py:226] c_key: ag1kZXZ-c2NoZWR1bGVycicLEglMb2NhdGlvbnMiBlJvZ2VycwwLEgZDb3VydHMiBmNvdXJ0Mgw
INFO 2012-09-10 21:25:19,192 views.py:228] weekday_key: ag1kZXZ-c2NoZWR1bGVyciELEgZDb3VydHMiBWNfa2V5DAsSBERheXMiBk1vbmRheQw
INFO 2012-09-10 21:25:19,192 views.py:229] weekday: Monday
INFO 2012-09-10 21:25:19,192 views.py:230] court: court2
INFO 2012-09-10 21:25:19,195 views.py:235] reservations: 1
我的模型如下。
class Courts(db.Model): #parent is Locations, courtname is key_name
location = db.ReferenceProperty(Locations)
timezone = db.StringProperty()
class Days (db.Model): #parent is Courts, name is key_name, day of week
court = db.ReferenceProperty(Courts)
startTime = db.ListProperty(int)
endTime = db.ListProperty(int)
class Reservations(db.Model): #parent is Days, hour, minute HH:MM is key_name
weekday = db.ReferenceProperty(Days)
day = db.IntegerProperty()
nowweekday = db.IntegerProperty()
name = db.StringProperty()
hour = db.IntegerProperty()
minute = db.IntegerProperty()
答案 0 :(得分:1)
您每次使用字符串 'c_key'
计算密钥,而不是变量c_key
的值。
然而即使你解决了这个问题,它仍然无效,因为你需要法院的ID,而不是完整的关键路径。
答案 1 :(得分:1)
i=0
for c in courts:
court_id = names[i]
i=i+1
weekday_key = db.Key.from_path('Courts', c.key().name(), 'Days', weekday)
reservation=Reservations.all()
reservation.ancestor(weekday_key)
nlimit=2*len(times)
reservations = reservation.fetch(limit=nlimit)
我不喜欢这个答案,weekday_key
对于法庭上的所有c都是一样的。这似乎不对。
答案 2 :(得分:1)
如何在(星期)特定工作日的法院特定法院对特定日期的所有预订构建查询?
您知道密钥的值,因此您可以手工制作密钥(可以这么说),然后使用该密钥作为祖先进行查询。
例如:
key = ndb.Key(BlogPost, 12345)
qry = Comment.query(ancestor=key)
但在这里你会使用像
这样的东西key = ndb.key(Locations, "Place1", Courts, "Name_Of_Court")
result = Reservations.query(ancestor=key)
等等,所以你正在沿着链条工作,并用你拥有的所有信息(即他们想要保留的法院)建立密钥。
然后,您的祖先查询的结果将是那些具有您作为其祖先传递的密钥的模型。
https://developers.google.com/appengine/docs/python/ndb/queries#ancestor