我无法从Google应用引擎数据存储区检索已过滤的列表(使用python进行服务器端)。我的数据实体定义如下
class Course_Table(db.Model):
course_name = db.StringProperty(required=True, indexed=True)
....
head_tags_1=db.ListProperty(db.Key)
所以head_tags_1属性是一个键列表(它是一个名为Headings_1的不同实体的键)。
我在下面的Handler中旋转我的Course_Table实体来过滤具有特定Headings_1键作为head_tags_1属性成员的课程。但是,当我知道有数据可以满足请求时,它似乎不会检索任何内容,因为当我返回迭代查询结果时,它从不显示下面的日志(如下)。对我做错了什么想法?
def get(self,level_num,h_key):
path = []
if level_num == "1":
q = Course_Table.all().filter("head_tags_1 =", h_key)
for each in q:
logging.info('going through courses with this heading name')
logging.info("course name filtered is %s ", each.course_name)
很多人感谢
答案 0 :(得分:1)
我认为h_key是headings_1的关键,因为head_tags_1是一个列表,我相信你需要的是IN运算符。 https://developers.google.com/appengine/docs/python/datastore/queries 击>
注意:你在for循环中的缩进似乎不正确。
我的糟糕显然'='列表已经检查了会员资格。使用=检查成员资格对我有用,你能确定h_key真的是一个数据存储区密钥类吗?
这是我的例子,第一个get产生结果,第二个不是
import webapp2 from google.appengine.ext import db
class Greeting(db.Model):
author = db.StringProperty()
x = db.ListProperty(db.Key)
class C(db.Model): name = db.StringProperty()
class MainPage(webapp2.RequestHandler):
def get(self):
ckey = db.Key.from_path('C', 'abc')
dkey = db.Key.from_path('C', 'def')
ekey = db.Key.from_path('C', 'ghi')
Greeting(author='xxx', x=[ckey, dkey]).put()
x = Greeting.all().filter('x =',ckey).get()
self.response.write(x and x.author or 'None')
x = Greeting.all().filter('x =',ekey).get()
self.response.write(x and x.author or 'None')
app = webapp2.WSGIApplication([('/', MainPage)],
debug=True)