使用Class,变形默认值不能按预期工作

时间:2014-01-22 16:18:17

标签: pyramid deform

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

我是第一个,有我的模特:

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"

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

1 个答案:

答案 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]