10

ここで明らかな何かが欠けているような気がします。TimeFieldを含むDjangoフォームがあります。「10:30AM」のような時間を許可したいのですが、その入力形式を受け入れたり、「%P」形式(「独自の拡張子」であるという注記が添付されていますが、それがどこから来たのかは言わないでください)。これが私のフォームコードの要点です:

calendar_widget = forms.widgets.DateInput(attrs={'class': 'date-pick'}, format='%m/%d/%Y')
time_widget = forms.widgets.TimeInput(attrs={'class': 'time-pick'})
valid_time_formats = ['%P', '%H:%M%A', '%H:%M %A', '%H:%M%a', '%H:%M %a']

class EventForm(forms.ModelForm):
    start_date = forms.DateField(widget=calendar_widget)
    start_time = forms.TimeField(required=False, widget=time_widget, help_text='ex: 10:30AM', input_formats=valid_time_formats)
    end_date = forms.DateField(required=False, widget=calendar_widget)
    end_time = forms.TimeField(required=False, widget=time_widget, help_text='ex: 10:30AM', input_formats=valid_time_formats)
    description = forms.CharField(widget=forms.Textarea)

「10:30AM」を送信すると、検証エラーが発生します。基になるモデルには、event_startとevent_endの2つのフィールドがあり、時間フィールドがないため、問題はそこにあるとは思いません。私が見逃している愚かなことは何ですか?

4

2 に答える 2

13

Karen の回答のおかげでわかりました。フォーマット文字は、Django の now/ date フィルターにリストされているものではなく、 Python の time.strftime(format[, t]) のものです。AM/PM を受け入れるには、%H から %I に切り替える必要があるため、フィルターは次のようになります。

valid_time_formats = ['%H:%M', '%I:%M%p', '%I:%M %p']

(このメッセージはオープン ソース コードによってもたらされました。それがなければ、私はそれを理解できなかったでしょう。)

于 2010-05-26T16:07:50.793 に答える
11

%p を指定する場合は、%I を使用して時間を解析する必要があります。ここのディレクティブの表の下にある最初のメモを参照してください: http://docs.python.org/library/time.html#time.strftime

于 2010-05-26T18:27:57.077 に答える