【问题标题】:Populate GAE Datastore Key Value in WTForms在 WTForms 中填充 GAE 数据存储键值
【发布时间】:2013-01-27 01:28:56
【问题描述】:

我正在使用 WTForms 和 GAE (python) 数据存储。我试图将键值传递给表单以用于 CRUD 目的,但它发送的是对象,而不是作为字符串的键。这是html输出行:

<td> <input id="ts_list-0-key" name="ts_list-0-key" type="hidden" value="&lt;bound method TransactionSchedule.key of &lt;main.TransactionSchedule object at 0x04F19070&gt;&gt;"> </td>

所有其他字段都正确填充。

其他信息: 我一起使用 FormField 和 FieldList 来重复多个子表单。要填充我正在使用 append_entry() 的子表单:

for ts in tslist:
    form.ts_list.append_entry(ts)

似乎在任何地方都找不到此信息,但也许我是个糟糕的 Google 员工。

我试过了:

-将密钥转换为模板中的字符串(jinja2),但似乎无法正常工作

-在 db.Model 类中创建一个__str__ 和一个__unicode__ 方法,将值作为字符串返回,但我想我读到了甚至不允许的地方:/

任何帮助都会很棒!

如果您需要查看更多代码,请告诉我,谢谢!

【问题讨论】:

    标签: python google-app-engine wtforms


    【解决方案1】:

    感谢您的回复。

    正如 RocketDonkey 所建议的,问题确实与 db.keydb.key() 有关。

    我最终做的是:

            for ts in tslist:
                ts_key = str(ts.key())
                form.ts_list.append_entry(ts)
                form.ts_list[-1].key.data = ts_key
    

    可能有更好的方法,但它奏效了。可以使用str(db.key())将键设置为字段的默认值

    【讨论】:

      【解决方案2】:

      ts.key 用于 NDB 或 ts.key() 用于 db 如果您像我一样记性不好,请使用备忘单

      Link to cheat sheet

      【讨论】:

      • 哈 +1 - 我以前从未见过该备忘单,可能需要将其添加为书签 :)
      【解决方案3】:

      很难说没有看到更多的代码,但看起来你的代码中的某个地方有一些类似于ts.key 的内容(假设tsTransactionSchedule 的一个实例)。 key 实际上是一种方法(不是属性),因此您需要将其称为 ts.key()

      例如,这里有一个简单的类,它有一个方法 - my_print。请注意将其作为属性引用(而不是将其作为方法调用)如何返回与上面 value 属性中类似的输出:

      >>> class MyClass(object):
      ...     def __init__(self, a):
      ...         self.a = a
      ...     def my_print(self):
      ...         print self.a
      ... 
      >>> c = MyClass('hello')
      >>> c.my_print
      <bound method MyClass.my_print of <__main__.MyClass object at 0x7f11c16791d0>>
      >>> c.my_print()
      hello
      

      【讨论】:

        猜你喜欢
        • 2017-08-16
        • 1970-01-01
        • 1970-01-01
        • 2017-04-16
        • 1970-01-01
        • 2013-12-01
        • 2023-04-02
        • 1970-01-01
        • 2012-11-21
        相关资源
        最近更新 更多