Django datetime не подтверждает право - PullRequest
0 голосов
/ 07 ноября 2018

Я использую тип ввода HTML5 datetime-local, чтобы попытаться получить данные о дате и времени в моей базе данных.

ModelForm class Meta: выглядит следующим образом:

class Meta:
    model = ScheduleEntry
    fields = ['calendar', 'title', 'start', 'end', 'assets', 'users']

    widgets = {
        'calendar': forms.Select(attrs={
            'class': 'fom-control chosen-select'
        }),
        'title': forms.TextInput(attrs={
            'class': 'form-control'
        }),
        'start': forms.DateTimeInput(attrs={
            'type':'datetime-local',
            'class':'form-control'
        }, format='%Y-%m-%dT%H:%M'),
        'end': forms.DateTimeInput(attrs={
            'type': 'datetime-local',
            'class': 'form-control'
        }, format='%Y-%m-%dT%H:%M'),
        'assets': forms.SelectMultiple(attrs={
            'class': 'form-control chosen-select'
        }),
        'users': forms.SelectMultiple(attrs={
            'class': 'form-control chosen-select',
        })

    }

Я продолжаю терпеть неудачу при проверке формы, и это заставляет меня вырывать волосы. Это страница документации, которая показывает, что она должна работать, но похоже, что я что-то упустил?

РЕДАКТИРОВАТЬ ДЛЯ УТОЧНЕНИЯ:

Сообщение об ошибке относится как к start, так и к end, и оно Enter a valid date/time

Ответы [ 3 ]

0 голосов
/ 07 ноября 2018

Может быть, вам нужно import datetime, чтобы убедиться, что это правильный формат даты / времени для python, здесь вы можете увидеть подход.

0 голосов
/ 07 ноября 2018

Заблуждение:

Цитировать документы :

Виджеты не следует путать с полями формы. Поля формы имеют дело с логикой проверки ввода и используются непосредственно в шаблонах. Виджеты связаны с отображением элементов ввода HTML-формы на веб-странице и извлечением необработанных отправленных данных.

Виджеты не влияют на проверку. Вы дали своим виджетам аргумент формата, но это не означает, что валидация поля формы будет использовать его - он только устанавливает начальный формат, в котором отображается содержимое виджета:

формат : формат, в котором будет отображаться начальное значение этого поля.


Решения

Два варианта:

  • укажите в поле формы (forms.DateTimeField) формат даты и времени, который вы хотели бы использовать, передав input_formats аргумент

    class MyIdealDateForm(forms.ModelForm):
        start = forms.DateTimeField(
            input_formats = ['%Y-%m-%dT%H:%M'],
            widget = forms.DateTimeInput(
                attrs={
                    'type': 'datetime-local',
                    'class': 'form-control'},
                format='%Y-%m-%dT%H:%M')
        )
    

    Это нужно сделать для каждого поля формы (и, возможно, даже для их виджетов). То, что вы делаете здесь, эффективно перезаписывает настройки (см. Следующий пункт).

  • Добавьте свой формат даты и времени в настройки в качестве первого элемента. Это будет применяться глобально ко всем полям форм и виджетам, которые используют этот параметр.

0 голосов
/ 07 ноября 2018

у вас просто опечатка. Сделайте его «формой» вместо «FOM» в значении класса.

'календарь': формы. Выбрать (attrs = { 'class': 'fom-control selected-select' }),

...