- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在我正在使用的一个 Plone 站点上,我有一个表单用于编辑存储映射到后端数据库中的表的对象的记录。在接口(interface)类中,其中一个字段是 schema.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
...
但是我得到这个错误:
“类型错误:‘datetime.datetime’对象没有属性‘getitem’。
我确实尝试了一些有趣的事情。我打印了 cal.Last_Calibration 的值,它是我添加记录时输入的日期。
我尝试打印 cal.Last_Calibration 的对象类型,它是 python 的日期时间(我相信与 zope 的相反?)。我尝试将字段设置为今天的日期:datetime.today() 并得到相同的错误。只是为了好玩,我还尝试将 currentCal.Last_Calibration 转换为字符串并将其传递到字段中,尽管这只是将随机数放入字段中。
作为记录,我将 python 的日期时间导入为:
from datetime import datetime
此外,添加记录/校准工作正常,所以这不是数据库或我正在使用的 sqlalchemy 模式的问题。
如果可能,在 updateWidgets 函数中设置架构字段值的合适方法是什么?
我应该使用不同的小部件吗?如果是这样,我真正需要的只是日期。添加/更新函数将采用日期时间对象,因此我可以根据数据创建日期时间对象,而不管我认为是什么类型。
最佳答案
在 z3c.form 框架中,获取小部件值的步骤如下:
您的问题是您试图将小部件值设置为日期时间,而不是小部件期望的该日期时间的序列化。
我会通过覆盖 getContent 而不是 updateWidgets 来做你想做的事情:
from five import grok
from plone.directives import form
class EditCalibration(form.SchemaForm):
grok.name('edit-calibration')
grok.require('zope2.View')
grok.context(ISiteRoot)
schema = ICalibration
def getContent(self):
id = self.request.get('id', None)
if id:
return session.query(Calibration).filter(Calibration.Calibration_ID == id).one()
您还需要声明您的 Calibration 类实现了 ICalibration 接口(interface),以便 z3c.form 认识到它可以获得 Last_Calibration 作为 Calibration 实例的一个属性。这应该看起来像这样:
from zope.interface import implementer
@implementer(ICalibration)
class Calibration(Base):
etc...
关于python - Zope.Schema/Plone - 如何在 updateWidget 函数中设置 Datetime 字段的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26921612/
我是一名优秀的程序员,十分优秀!