【发布时间】:2014-05-18 11:49:11
【问题描述】:
我正在编写一个向用户显示许多元素的应用程序,他必须在其中选择一些元素进行处理。当他这样做时,应用程序会在 DB 中查询这些元素的其余数据,并将它们与它们的完整数据堆叠在下一页上。
我制作了一个 HTML 表单循环,每个元素旁边都有一个复选框,然后在 Python 中检查该复选框的值以获取数据。
即使我只是尝试查询数据,ndb 也不会返回任何内容。
pitemkeys是要查询的元素的id。inpochecks是复选框变量。preqitems是获取数据后保存项目的dict。
下一页没有任何查询并且是空白的。
cmets 是我最初的预期代码,由于没有查询任何内容而产生了很多错误。
request_code = self.request.get_all('rcode')
pitemkeys = self.request.get_all('pitemkey')
inpochecks = self.request.get_all('inpo')
preqitems = {}
#idx = 0
#for ix, pitemkey in enumerate(pitemkeys):
# if inpochecks[ix] == 'on':
# preqitems[idx] = Preqitems.get_by_id(pitemkey)
# preqitems[idx].rcode = request_code[ix]
# idx += 1
for ix, pitemkey in enumerate(pitemkeys):
preqitems[ix] = Preqitems.get_by_id(pitemkey)
#preqitems[ix].rcode = request_code[ix]
更新:尝试时
preqitems = ndb.get_multi([ndb.Key(Preqitems, k) for k in pitemkeys])
preqitems 返回一个包含None 值的列表,好像数据库找不到这些键的数据。我检查了键,由于某种原因它们是 unicode 格式,这可能是原因吗?它们看起来像这样。
[u'T-SQ-00301-0002-0001', u'U-T-MT-00334-0007-0002', u'U-T-MT-00334-0008-0001']
【问题讨论】:
-
好吧,您确定数据存储中有这些键的数据吗?关键值从何而来?
-
我确定 Daniel,但我认为我还必须为祖先添加详细信息。如果父项不同,显然键名可能会重复。但我不认为这是唯一的问题:/
-
但这就是为什么我问你是如何为复选框生成值的。您可能应该输出 urlsafe 值,而不是您现在正在做的任何事情。
-
在问题的最后,您列出了所谓的一组“键”,但这些不是键,只是手动创建的用作 id 的字符串。如果您使用祖先创建了
Preqitems,则还必须提供祖先。 -
你们俩都是对的。如果复选框被选中,它们只会返回一个“on”值,我设法使用它,但我的问题是查询数据本身。最后的字符串是 ID,而不是完整的键,这正是它们的含义,但即使我包含了祖先,它也出于某种原因没有查询。我通过使用另一个变量查询我需要的表的整个部分来解决这个问题,然后使用复选框验证我需要的 id,我给出了一个唯一值来指示实体的行号。
标签: google-app-engine python-2.7 jinja2 app-engine-ndb