plone.app.event-使用IEventBasic作为行为,如何在事件中以编程方式正确设置结束字段?

时间:2016-09-27 16:50:49

标签: plone plone-4.x

我有一个使用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。

0 个答案:

没有答案