在WTForms中填充GAE数据存储区键值

时间:2013-02-11 20:58:49

标签: python google-app-engine wtforms

我正在使用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__方法,该方法将值作为字符串返回,但我想我读到了甚至不允许的地方:/

任何帮助都会很棒!

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

3 个答案:

答案 0 :(得分:1)

很难说没有看到更多的代码,但它看起来像代码中的某个地方你有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

答案 1 :(得分:1)

用于NDB的ts.key或用于db的ts.key() 如果你有像我这样的记忆错误,请使用备忘单

Link to cheat sheet

答案 2 :(得分:0)

感谢您的回复。

该问题与RocketDonkey建议的db.key vs db.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())

将密钥设置为字段的默认值