WTForm:我如何告诉Form为一个特定属性使用自定义方法?

时间:2014-06-20 09:32:51

标签: python wtforms

我有以下定义:

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

0 个答案:

没有答案