1

我正在使用带有金字塔的变形表单插件。

我首先,有我的模型:

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"

到我的默认输入框(或任何选项,即使我硬编码,用应该是默认选择的值替换变量名)。

4

1 回答 1

2

我必须更新我的类方法以将整数值作为字符串返回,即使如果我手动定义选项,这不是必需的,如变形演示中所示:

@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]
于 2014-01-23T09:53:08.540 回答