【问题标题】:Deform default not working as expected with Class变形默认值无法按预期与 Class 一起工作
【发布时间】:2014-01-23 17:53:08
【问题描述】:

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

首先,有我的模型:

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"

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

【问题讨论】:

    标签: pyramid deform


    【解决方案1】:

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

    @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-08-20
      • 2012-02-19
      • 2019-12-14
      • 1970-01-01
      • 2011-07-18
      • 2019-09-04
      • 2016-05-15
      • 2022-01-19
      • 1970-01-01
      相关资源
      最近更新 更多