gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:09:05 26 4
gpt4 key购买 nike

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

编辑:我正在使用 Plone 4.3.9

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

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

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,
)

这只适用于添加形式,它设置在一年之间,在我提供的示例中是 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 解决方案。

关于Plone/zope.schema- 如何在两个日期之间的日期小部件上设置年份范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37813777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com