我正在使用带有金字塔的变形表单插件。
我首先,有我的模型:
class Manufacturer(Base):
__tablename__ = 'manufacturers'
id = Column(Integer, primary_key=True)
name = Column(Unicode, nullable=False, unique=True)
image_id = Column(Integer, ForeignKey('images.id'))
product = relationship('Product', backref='manufacturer')
@classmethod
def _choices(cls):
choices_query = DBSession.query(cls).\
order_by(asc(Manufacturer.name)).all()
return [(ch.id, ch.name) for ch in choices_query]
现在在我看来,我有变形代码,这可以很好地添加新条目。
class EditMattingSchema(colander.MappingSchema):
name = colander.SchemaNode(colander.String(),
default=product.name)
manufacturer = colander.SchemaNode(colander.String(),
widget = widget.SelectWidget(values=Manufacturer._choices()))
现在这会正确生成我的 html,并且选择框可以完美呈现。
但是,当我使用默认选项时,例如:
product = Session.query(Product).\
filter(Product.slug == 'foo').first()
default_id = product.manufacturer_id
print default_id
1
manufacturer = colander.SchemaNode(colander.String(),
default = default_id
widget = widget.SelectWidget(values=Manufacturer._choices()))
呈现的 html 没有添加
selected="selected"
到我的默认输入框(或任何选项,即使我硬编码,用应该是默认选择的值替换变量名)。