Plone/zope.schema-如何在日期小部件上设置两个日期之间的年份范围?

Plone/zope.schema-如何在日期小部件上设置两个日期之间的年份范围?,plone,zope,Plone,Zope,在我的表单(plone.directives.form.SchemaForm)中,我使用一个包含日期字段(zope.schema.date)的模式,并且该日期字段被自动设置为日期选择器小部件 编辑:我正在使用Plone 4.3.9 小部件的默认年份范围相对于日期自动设置为-10年到+10年之间 我尝试为date字段创建一个小部件工厂并设置年份范围 from z3c.form.widget import FieldWidget from zope.component import adapter

在我的表单(plone.directives.form.SchemaForm)中,我使用一个包含日期字段(zope.schema.date)的模式,并且该日期字段被自动设置为日期选择器小部件

编辑:我正在使用Plone 4.3.9

小部件的默认年份范围相对于日期自动设置为-10年到+10年之间

我尝试为date字段创建一个小部件工厂并设置年份范围

from z3c.form.widget import FieldWidget
from zope.component import adapter
from zope.interface import implementer
from plone.directives import form
from datetime import date
from plone.formwidget.datetime.z3cform import DateWidget
from plone.supermodel import model
from z3c.form.interfaces import IFieldWidget

@implementer(IFieldWidget)
def DateFieldWidget(field, request):
    widget = FieldWidget(field, DateWidget(request))
    start = -(date.today().year - 1984)
    end = 10
    widget.years_range = (start, end)
    return widget

class IMyObject(model.Schema):
    ...
    form.widget('Prev_Date',DateFieldWidget)
    Prev_Date = schema.Date(
        title=u"Previous Date",
        description=u"A previous date",
        required=False,
    )
这只在add表单中有效,在我提供的1984年的示例中,它设置为一年,从今天的年份开始设置为10年。在编辑表单中,可供选择的第一年和最后一年处于禁用状态

我确实试过检查是否可以检查值是否已设置,但在编辑表单中,我得到的是一个空值,即使它已设置

@implementer(IFieldWidget)
def DateFieldWidget(field, request)
    widget = FieldWidget(field, DateWidget(request))
    #widget.value is a tuple
    defaultEndOfRange = 10
    try:
        start = -(int(widget.value[0]) - 1984)
        end = defaultEndOfRange - (int(widget.value[0]) - date.today().year)
    except:
        start = -(date.today().year - 1984)
        end = defaultEndOfRange
    widget.years_range = (start,end)
    return widget
我可以在updateWidgets函数中实现这一点,而不是使用小部件工厂,但是我有两种灵活的内容类型,我没有为它们定制添加和编辑表单,我希望在两个不同的字段上使用相同的年份范围


既然这不起作用,那么有什么更好的方法?还是继续创建添加和编辑表单?

在我的表单界面中,我对日期字段有以下定义:

from collective.z3cform.datetimewidget import DateWidget    
....
....
....    
form.widget('birthday', DateWidget)
birthday = schema.Date(
  title=_(u'Birthday'),
  description=_(u'your birthday'),
  required=True,
  min = date(1950,1,1),
  max = date(2015,1,1))

但这是一个Plone 4解决方案

不是答案,而是胡乱猜测。。。我假设你在第四频道。您可能可以使用jbot覆盖
标记上的最小/最大值,如为