在我正在處理的plone站點上,我有一個表單,用於編輯映射到後端數據庫表中的對象的記錄。在接口類中,其中一個字段是schema.Datetime字段。Zope.Schema/Plone - 如何在updateWidget函數中設置Datetime字段的值?
class ICalibration(Interface):
"""Interface class for calibration records
"""
...
Last_Calibration = schema.Datetime(title=u"Last Calibration"
description=u"date of last calibration",
)
...
在我updateWidgets功能,在編輯表格,我嘗試設置控件的值,
class EditCalibration(form.Form):
grok.name('edit-calibration')
grok.require('zope2.View')
grok.context(ISiteRoot)
def updateWidgets(self):
super(EditCalibration, self).updateWidgets()
id = self.request.get('id',None)
if id:
currentCal = session.query(Calibration).filter(Calibration.Calibration_ID == id).one()
...
self.widgets["Last_Calibration"].value = currentCal.Last_Calibration
...
,但我得到這個錯誤:
「類型錯誤:「日期時間。日期時間」對象有沒有屬性‘的GetItem’。
我曾嘗試一些事情,是那種有趣。 我打印出Cal.Last_Calibration的值,並將其作爲我添加記錄時的日期顯示出來。
我試過打印cal.Last_Calibration的對象類型,它是Python的日期時間(與zope的我相信?)。 我試圖設置字段等於今天的日期:datetime.today()並得到相同的錯誤。 只是踢,我也嘗試將currentCal.Last_Calibration轉換爲一個字符串,並將其傳遞到字段,雖然這只是隨機數字內的字段。
爲了記錄在案,我進口Python的日期時間爲:
from datetime import datetime
此外,添加記錄/校準工作正常,所以它不是與數據庫或SQLAlchemy的架構問題,我使用。
如果可能,在updateWidgets函數中設置模式字段值的適當方式是什麼?
我應該使用不同的小工具嗎?如果是這樣,我真正需要的就是日期。添加/更新功能將採用日期時間對象,所以我可以根據數據創建日期時間對象,無論我認爲什麼類型。
不確定,但嘗試使用Zope DateTime(您有方法將本地Python日期時間對象轉換爲這些)。 –
我試圖將python datetime轉換爲zope datetime對象。 self.widgets [「Last_Calibration」]。value = DateTime(currentCal.Last_Calibration)。這給了我一個類型錯誤消息,指出DateTime對象不支持索引。我也試過self.widgets [「Last_Calibration」]。value = DateTime(datetime.today()),但是這給了我同樣的錯誤。 –
編輯:我發現了一些有趣的東西。 schema.DateTime小部件正在查找元組或列表。 它似乎接受的格式是(年,月_as_integer,day_as_integer,小時,分鐘,時區) 因此,例如,這工作: self.widgets [Last_Calibration] .value =(2016,04,05,13,04, 'EST') –