我有一个使用IEventBasic行为的灵巧内容类型(my.product.myobject)(在xml文件中实现了其他行为),我试图在同一周内设置结束字段起始字段。我尝试在IObjectAddedEvent(zope.lifecycleevent.interfaces.IObjectAddedEvent)中更正结束日期。
我首先从起始字段获取周范围:
def getWeekRangeFromDate(a_date,offset=1):
start = (a_date - timedelta(days=(a_date.weekday() + offset) % 7)).replace(hour=0,minute=0)
end = (start + timedelta(days=6)).replace(hour=23,minute=59)
return {'start':start,
'end':end,
}
def myObjectAdded(myObject, event):
week_range = getWeekRangeFromDate(myObject.start)
if myObject.end > week_range['end']:
myObject.end = week_range['end']
我在browserview中打印了结束字段,我使用IEventAccessor从myObject中提取结束日期:
class View(BrowserView):
def __init__(self,context,request):
...
self.context = self.context
def getFormattedEnd(self):
if self.context.whole_day == False:
return IEventAccessor(self.context).end.strftime('%m/%d %I:%M %p')
...
如果不需要以编程方式进行修正,则结束字段会正确显示,但是当它显示时,它会显示5个小时。
在我的myObjectAdded事件中,我尝试了:
if myObject.end > week_range['end']:
myObject.end = week_range['end'] - timedelta(hours = IEventAccessor(myObject).end.offset().total_seconds()/3600)
这实际上看起来是正确的,但是当我转到编辑表单并更改开始字段时,结束字段最终会改变自身看似随机。将开始时间字段更改为16会在结束前两周改变结束时间。
如果不采取行动我该怎么设置?我是否误解了如何使用IEventBasic?
编辑:我遇到了非常有趣的事情。在编辑表单中,Start End Validator失败。
活动开始 - 2016年11月25日9:00 活动结束 - 25 / Novermber / 2016 20:00
我点击提交,状态消息显示结束日期必须在开始日期之后。
编辑:我使用的Plone版本是4.3。