1

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

任何帮助都会很棒!

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

4

3 回答 3

1

很难说没有看到更多的代码,但看起来你的代码中的某个地方你有一些类似的东西ts.key(假设这ts是一个实例TransactionSchedule)。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
于 2013-02-12T08:55:40.283 回答
1

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

链接到备忘单

于 2013-02-12T11:29:05.567 回答
0

感谢您的回复。

正如 RocketDonkey 所建议的那样,这个问题确实与db.keyvs有关。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())

于 2013-02-20T23:58:35.027 回答