1

フォームから日時オブジェクトを保存する際に問題が発生しました。フォームウィジェットは、次のようなテキスト文字列を表示します:2012-09-20 04:41 PM

次のように、フォームのcleanメソッドをオーバーライドしようとしています。

class LegForm(ModelForm):
    formfield_callback = make_custom_field

    class Meta:
        model = Leg
        exclude = ('riders', 'drivers', 'open_to_prefs','carpool')

    widgets = { 'days': forms.CheckboxSelectMultiple }

    def clean_drive_date_time(self):
        twelve_hour = self.cleaned_data['drive_date_time']
        print "drive time: " + str(twelve_hour)
        data = datetime.strptime(twelve_hour, "%Y-%m-%d %I:%M %p")
        print "24 hour drive time: " + str(data)
        return data

strptimeステートメントはコマンドラインから機能し、有効な日時オブジェクトを提供しますが、上記のようにプロジェクトで試してみると、フォームに「有効な日時を入力してください」というエラーが表示されます。

24時間形式を使用すれば、cleanメソッドをオーバーライドしなくても問題なく日時を保存できますが、エンドユーザーにとってはさらに困難です。どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

3

フォーム フィールドの仕事は、ユーザーからの入力を受け取り、それを Python の値に正規化することです。Python の datetime オブジェクトは、12/24 時間形式かどうかを気にしません。格納されるのは、12/24 形式のいずれかで表すことができる何らかの普遍的な方法での日時だけです。

したがって、あなたがやろうとしていることは、ユーザーからの入力を 12 時間形式ではなく 24 時間形式で取得することだと理解しています。最も簡単な方法は、ユーザーから期待される形式を django フォーム フィールドに伝えることです。これにより、ユーザーからの文字列が Python の datetime オブジェクトに自動的に変換されます。

class LegForm(ModelForm):
    formfield_callback = make_custom_field

    # overwrite the default DateTimeField with defaults parameters
    drive_date_time = DateTimeField(input_formats=['%Y-%m-%d %I:%M %p'])

    class Meta:
        model = Leg
        exclude = ('riders', 'drivers', 'open_to_prefs','carpool')

    widgets = { 'days': forms.CheckboxSelectMultiple }
于 2012-09-14T21:10:15.023 に答える