3

私は次のようなFormlibを使用してフォームを作成しています。

zope.schemaからインポートChoice、Float、Int、Date、TextLine
Products.Five.formlib.formbaseからインポートPageForm

クラスISimuladorForm(Interface):
    "" "
    sofomanecの財務シミュレーター用のZopeインターフェース。
    "" "
    start_date = Date(title = _(u'開始日')、
                            description = _(u'ローン開始日。')、
                            required = False)
。
。
。

クラスSimuladorForm(PageForm):
    form_fields = form.FormFields(ISimuladorForm)

のデフォルトの入力形式start_date「mm/dd / yy」ですが、ユーザーは「dd / mm/yy」のstart_date形式で入力する必要があります。

このインターフェイス/スキーマ/フォームのデフォルトの日付形式を変更するにはどうすればよいですか?

4

3 に答える 3

1

DateI18nWidgetデフォルトの の代わりに を使用できますDateWidget

値のフォーマットを制御する属性を取りdisplayStyle、要求ロケールを使用して日付をフォーマットします。displayStyle'full'、'long'、'medium'、'short'、または None のいずれかである必要があり、で定義されている日付形式を参照しzope.i18nます。デフォルトは None です。これは「短い」ことを意味すると思いますが、これはコードからは不明です。

正確な書式設定は、portal_languages ツールによって Plone サイトに設定された言語に基づいたリクエスト ロケールから取得されます。したがって、サイトの言語を設定すると、DateI18nWidgetが使用する日付形式も決まります。これらは、一連の XML ファイルzope.i18n内のディレクトリ内のパッケージで定義されlocales/dataます (要素を探します<dateFormats>)。

これで満足できない場合は、カスタム ブラウザー ウィジェットを作成する必要があります。あなたの最善の策は、自分自身をサブクラス化し、日付を希望どおりにフォーマットDateWidgetする新しいメソッドを提供することです。_toFormValue

于 2011-04-25T11:07:15.140 に答える
0

これは、カスタムの日付ウィジェットを formlib フォームに追加するのに役立つ場合があります。

http://plone.org/documentation/manual/developer-manual/forms/using-zope.formlib/customizing-the-template-and-the-widgets

既存の日付ウィジェット クラスの 1 つから派生させて、独自の日付ウィジェットを作成することをお勧めします。

http://svn.zope.org/zope.formlib/trunk/src/zope/formlib/textwidgets.py?rev=113031&view=markup

を使用した日付形式のカスタム変換

_toFieldValue()
_fromFieldValue() 

フックは非常に簡単です...既存のコードを見てください。

于 2011-04-25T09:25:29.737 に答える
0

これは私がしたことです:

from zope.app.form.browser import DateI18nWidget
from zope.i18n.format import DateTimeParseError
from zope.app.form.interfaces import ConversionError


class MyDateI18nWidget(DateI18nWidget):
    displayStyle = None

    def _toFieldValue(self, input):
        if input == self._missing:
            return self.context.missing_value
        else:
            try:
                formatter = self.request.locale.dates.getFormatter(
                    self._category, (self.displayStyle or None))
                return formatter.parse(input.lower())
            except (DateTimeParseError, ValueError), v:
                raise ConversionError(_("Invalid datetime data"),
                    "%s (%r)" % (v, input))

class SimuladorForm(PageForm):
...
    form_fields['start_date'].custom_widget = MyDateI18nWidget
于 2011-04-26T19:32:55.800 に答える