1

SplitDateTimeWidgetを使用しようとしていますが、日付を日-月-年の形式で受け入れるようにしたいです。

from django.forms.widgets import SplitDateTimeWidget

class EventForm(forms.ModelForm):
    class Meta:
        model = Event
        widgets = {'start': SplitDateTimeWidget(date_format='%d/%m/%Y')}

SplitDateTimeWidgetはdate_format引数を受け入れます。これは、日付入力を検証するために使用されることを期待していますが、そうではありません。

デフォルトのウィジェットは正しく置き換えられますが、date_formatを無視し、デフォルトの月-日-年に対して検証することを要求します。

また、DATE_FORMATとDATE_INPUT_FORMATSの設定もうまくいきませんでした。

助けてくれてありがとう。

4

3 に答える 3

7

これは私のために働いた:

class EventForm(forms.ModelForm):

    start = SplitDateTimeField(input_date_formats=['%d/%m/%Y'],
                               input_time_formats=['%H:%M'], 
                               widget=SplitDateTimeWidget(date_format='%d/%m/%Y',
                                                          time_format='%H:%M'),
                               )

    class Meta:
        model = Event
于 2013-01-07T16:47:02.413 に答える
1

ウィジェットの日付形式は出力のみを担当し、検証には関係ありません。重要なのはフィールドタイプであり、SplitDateTimeFieldの場合は、input_date_formatsパラメーターを使用してインスタンス化されるDateFieldとTimeFieldを使用します。

したがって、答えは次のとおりです。

class EventForm(forms.ModelForm):
    class Meta:
        model = Event
        widgets = {'start': SplitDateTimeWidget(date_format='%d/%m/%Y')}

    start = SplitDateTimeField(input_date_formats='d/m/Y',
                               input_time_formats='<whatever, or skip it>')

input_date_formatsはDjango形式であることに注意してください。http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date

于 2011-10-06T14:46:13.567 に答える
1

SplitDateTimeFieldの日付部分が'%d /%m /%Y'の形式の日付を受け入れるようにしようとすると、同じ問題が発生しました。

マラーによる上記の解決策は私にはうまくいきませんでした(omatによる修正を含む)

私はついにsettings.pyの日時入力フォーマットのデフォルトリストをオーバーライドすることで問題を解決しました:

DATETIME_INPUT_FORMATS = ('%d/%m/%Y %I:%M', '%Y-%m-%d %H:%M', '%Y-%m-%d',
    '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M', '%m/%d/%Y',
    '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M', '%m/%d/%y')

リストの最初に目的の形式を追加したので、他の形式よりも優先されます。

Djangoのドキュメントから:「最初の有効なものを使用して、フォーマットが順番に試されます」

于 2012-07-04T18:09:38.357 に答える