【问题标题】:How to use django-bootstrap-datepicker-plus TimePickerInput with am/pm?如何将 django-bootstrap-datepicker-plus TimePickerInput 与 am/pm 一起使用?
【发布时间】:2020-02-03 06:00:02
【问题描述】:

使用 django-bootstrap-datepicker-plus 非常容易设置。但是使用 TimePickerInput 很棘手。默认为 24​​ 小时制。因此,我可以通过这样做将其更改为美国上午/下午时间:

widget = TimePickerInput(format='%I:%M %p')

它创建了这个外观奇特但功能强大的时间选择器:

我的问题在于表单验证。 03:39 am 不是有效时间。如果我从 TimePickerInput 格式中删除 am/pm(所以日期看起来像 03:39),它会成功验证。但我显然需要保留 am/pm - 这会阻止保存。

<ul class="errorlist"><li>disposal_time<ul class="errorlist"><li>Enter a valid time.</li></ul></li></ul>

我已经修改了表单中的clean方法

  def clean(self):
        cleaned_data = super(TempForm, self).clean()
        form_disposal_time = self.data.__getitem__('disposal_time')
        form_disposal_time = datetime.strptime(form_disposal_time, '%I:%M %p').time()
        cleaned_data['disposal_time'] = form_disposal_time
        return cleaned_data

这创建了我认为是有效的 Python 时间03:39:00。但是表单仍然将其视为无效时间而拒绝。在这个过程中,向模型添加验证太远了。我不确定我的 clean() 方法是否不起作用,或者我是否需要在其他地方拦截表单验证。 那么除了搬到欧洲并采用 24 小时制之外,我还有什么办法可以解决这个问题?

【问题讨论】:

    标签: python django datetime datepicker


    【解决方案1】:

    您还需要在forms.TimeField(...)--(Django doc) 中指定input_formats--(Django Doc) 参数。

    from bootstrap_datepicker_plus import TimePickerInput
    
    TIME_FORMAT = '%I:%M %p'
    
    
    class FooModelForm(forms.ModelForm):
        disposal_time = forms.TimeField(input_formats=[TIME_FORMAT],
                                        widget=TimePickerInput(format=TIME_FORMAT)
                                        )
    
        class Meta:
            fields = '__all__'
            model = Foo

    Django 借助 input_formats 参数在字段级别验证来自小部件的值。由于没有向表单字段提供任何input_formats,Django 使用default time format

    【讨论】:

      猜你喜欢
      • 2019-03-05
      • 1970-01-01
      • 2013-09-24
      • 2018-07-12
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 2014-09-07
      • 2011-06-08
      相关资源
      最近更新 更多