get_by_id()不返回值

时间:2014-05-18 11:49:11

标签: google-app-engine python-2.7 jinja2 app-engine-ndb

我正在编写一个应用程序,向用户显示许多元素,他必须在其中选择一些元素进行处理。当他这样做时,应用程序向 DB 查询这些元素上的其余数据,并在下一页上将它们与完整数据堆叠起来。

我创建了一个 HTML 表单循环,每个元素旁边都有一个复选框,然后在 Python 中检查此复选框的值以获取数据。

即使我只是想查询数据,ndb也不会返回任何内容。

pitemkeys是要查询的元素的ID。
inpochecks是复选框变量。
preqitems是获取数据后保存项目的字典。

下一页什么都不查询,而且是空白的。

评论是我原来想要的代码,因为没有查询任何内容而产生了很多错误。

    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']

1 个答案:

答案 0 :(得分:0)

可能你需要这样做:in(potemkin)或str(potemkin),取决于你是使用整数还是字符串id