Как использовать django - bootstrap -datepicker-plus TimePickerInput с am / pm? - PullRequest
0 голосов
/ 03 февраля 2020

Использование django - bootstrap -datepicker-plus было очень легко настроить. Но использовать TimePickerInput было сложно. По умолчанию используется 24-часовое время. Поэтому я смог изменить его на американское время / вечернее время, выполнив следующее:

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

, что создало этот странно выглядящий, но функциональный таймер:

enter image description here

Моя проблема при проверке формы. 03:39 am не является действительным временем. Если я удаляю am / pm из формата TimePickerInput (поэтому даты отображаются как 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-часовых часов, есть ли способ исправить это?

1 Ответ

1 голос
/ 07 февраля 2020

Вам необходимо указать input_formats - (Django Do c) в вашем forms.TimeField(...) - (Django do c) .

from bootstrap_datepicker_plus import TimePickerInput

<b>TIME_FORMAT = '%I:%M %p'</b>


class FooModelForm(forms.ModelForm):
    disposal_time = forms.TimeField(<b>input_formats=[TIME_FORMAT],</b>
                                    widget=TimePickerInput(<b>format=TIME_FORMAT</b>)
                                    )

    class Meta:
        fields = '__all__'
        model = Foo

Django проверка значения из виджета на уровне поля с помощью input_formats параметр. Поскольку вы не предоставили input_formats в поле формы, Django использует стандартный формат времени ,

...