Plone / SQLAlchemy - 如何正确地使接口适应表单以编辑后端数据库中的记录(使用映射类)?

时间:2014-11-17 19:00:50

标签: sqlalchemy schema plone

我正在尝试创建一个表格来编辑表格中的记录。

以下是我的界面的简要示例:

class ICalibration(Interface):
"""Interface class for Calibration
"""

    Calibration_ID = schema.Int(title=u"Calibration_ID",
                                required=False
                            )
    ...

    Calibration_Type = schema.Choice(title=u"Calibration Type",
                                     description=u"Type of Calibration",
                                     source=_calibrationTypes,
                                     required=True,
                           )

    ...
    Last_Calibration = schema.Datetime(title=u"Last Calibration",
                                   required=False,
                      )
...

以下是ORMBase类的简要示例:

@implementer(ICalibration)
class Calibration(ORMBase)

    __tablename__="Calibrations"

    Calibration_ID = sqlalchemy.Column(sqlalchemy.Integer(),
                                       primary_key=True,
                                       autoincrement=True
                           )

    Calibration_Type = sqlalchemy.Column(sqlalchemy.Integer(),
                                         nullable=False
                                    )

    ...

    Last_Calibration = sqlalchemy.Column(sqlalchemy.types.DateTime(),
                                         nullable=True,
                                    )

    ...

以下是表单类的内容:

class EditCalibration(form.SchemaForm):

    grok.name('edit-calibration')
    grok.require('zope2.View')
    grok.context(ISiteRoot)

    schema = ICalibration

    id = None

    @memoize
    def getContent(self):
        self.id = self.request.get('id',None)
        if self.id:
            return session.query(Calibration).filter(Calibration.Calibration_ID == self.id).one()

    @button.buttonAndHandler(u'Submit')
    def handleOk(self, action):
        data, errors = self.extractData()
        #do something with data
    ....

    @button.buttonAndHandler(u'Cancel')
    def handleCancel(self, action):
        #redirect user
    ....

值本身确实在各自的字段中正确显示,但我在调试菜单中收到错误:

TypeError: ('Could not adapt', None, <InterfaceClass gpcl.calibration.calibration.ICalibration>)

如何解决此问题以使其正确适应?

另外,作为参考,我实际上要求question before得到一个答案,提供Calibration和CalibrationForm类的代码。因为字段填写得很好,可能是我做错了。

0 个答案:

没有答案