【问题标题】:get_by_id() not returning valuesget_by_id() 不返回值
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 2014-01-16
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 2019-07-20
    相关资源
    最近更新 更多