我正在使用WTForms和GAE(python)数据存储区。我正在尝试将键值传递给表单以用于CRUD目的,但它发送的是对象,而不是键作为字符串。这是html输出行:
<td> <input id="ts_list-0-key" name="ts_list-0-key" type="hidden" value="<bound method TransactionSchedule.key of <main.TransactionSchedule object at 0x04F19070>>"> </td>
正确填充所有其他字段。
其他信息: 我一起使用FormField和FieldList来重复多个子表单。要填充子表单我正在使用append_entry():
for ts in tslist:
form.ts_list.append_entry(ts)
似乎无法在任何地方找到这些信息,但也许我是一个糟糕的Google员工。
我试过了:
- 将密钥转换为模板中的字符串(jinja2),但似乎无法使其工作
在db.Model类中创建一个__str__
和一个__unicode__
方法,该方法将值作为字符串返回,但我想我读到了甚至不允许的地方:/
任何帮助都会很棒!
如果您需要查看更多代码,请告诉我们,谢谢!
答案 0 :(得分: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
答案 1 :(得分:1)
用于NDB的ts.key或用于db的ts.key() 如果你有像我这样的记忆错误,请使用备忘单
答案 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())