我正在使用带金字塔的变形表单插件。
我是第一个,有我的模特:
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"
到我的默认输入框(或任何选项,即使我硬编码,将变量名替换为默认值)。
答案 0 :(得分:2)
我必须更新我的类方法以将整数值作为字符串返回,即使我手动定义选项也不需要,如deform demo中所示:
@classmethod
def _choices(cls):
choices_query = DBSession.query(cls).\
order_by(asc(Manufacturer.name)).all()
return [(str(ch.id), ch.name) for ch in choices_query]