我有以下定义:
class ProduceType(ndb.Model):
crop = ndb.StringProperty()
variety = ndb.StringProperty()
class OrderEntry(ndb.Model):
producetype = ndb.KeyProperty(kind=ProduceType, required=True)
quantity = ndb.IntegerProperty(required=True)
我创建了以下WTForm:
class OrderEntryForm(Form):
quantity = IntegerField('Quantity',
[validators.Required(), validators.NumberRange(min=1)])
# we will be dynamically adding choices
producetype = SelectField('Produce',
[validators.Required()],
choices=[])
这就是我在测试中所做的事情:
def setUp(self):
self.pt1 = ProduceType(crop='Choi', variety='Bok')
self.pt2 = ProduceType(crop='Cress', variety='True')
self.pt1.put()
self.pt2.put()
def test_order_entry(self):
oe = OrderEntry(producetype=self.pt1.key, quantity=20)
oef = OrderEntryForm(obj=oe)
oef.producetype.choices = [
(self.pt1.key.id(), self.pt1.name()),
(self.pt2.key.id(), self.pt2.name())
]
print oef.producetype
这就是正在印刷的内容:
<select id="producetype" name="producetype"><option value="1">Choi - Bok</option><option value="2">Cress - True</option></select>
问题: 我正在尝试渲染表单供我的用户编辑。
因此,如果我的数据库中的OrderEntry看起来像:
order_entry = { producetype: self.pt1.key, quantity: 5 }
我希望WTForms能够呈现如下内容:
<select id="producetype" name="producetype">
<option value="1" selected>Choi - Bok</option>
<option value="2">Cress - True</option>
</select>
但是,现在我无法让WTForm正确呈现选中。正在渲染的选择当前为空。
如何让WTForm正确呈现选中?
注意:
在表单填充期间,即oef = OrderEntryForm(obj=oe)
,如果WTForm尝试访问obj.producetype,则会给出ndb.key
。如您所见,oef.producetype.choices元组的第一个成员是ndb.key.id()
而不是ndb.key