У меня есть следующие определения:
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 правильно отображать selected. Отображаемый выбор в настоящее время пуст.
Как заставить WTForm правильно отображать selected?
ПРИМЕЧАНИЕ:
Во время заполнения формы, то есть oef = OrderEntryForm(obj=oe)
, если WTForm попытается получить доступ к obj.producetype, это даст вам ndb.key
. Как видите, первый член кортежа oef.producetype.choices имеет номер ndb.key.id()
, а не ndb.key
.
self.pt1.key
должно быть строковым значением, соответствующим атрибутуvalue
<option>
. Есть ли способ преобразоватьndb.key.id()
в строковое значение? Если вы не знаете, но думаете, что это возможно, это будет подходящий вопрос для поиска/задания по тегу appengine. В противном случае вы никогда не сможете преобразовать сложный ключndb
в примитивный атрибут value поля формы. - person nsfyn55   schedule 20.06.2014formdata
принудит формат проводника (а-ля'1'
к1
), но сделает ли он это наоборот? - person nsfyn55   schedule 20.06.2014order_entry_form = OrderEntryForm(quantity=oe.quantity, producetype=oe.producetype.id())
- person disappearedng   schedule 20.06.2014