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 格式表示。

因此,据我了解,您正在尝试做的是以 24 小时而不是 12 小时格式从用户那里获取输入。最简单的方法是告诉 django 表单字段您期望用户提供的格式,它会自动将字符串从用户转换为 python 日期时间对象。

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 回答