@ilya_chch

Как реализовать Datetime виджет в Django 2?

Использую Django 2.2
USE_TZ = True
В модели поле:
class Training(UuidBasedModel):
    client = models.ForeignKey('common.User', on_delete=models.CASCADE, verbose_name=_('Client'))
    canceled = models.BooleanField(default=False, verbose_name=_('Canceled'))
    cancel_reason = models.CharField(default='', max_length=255, blank=True, verbose_name=_('Cancel reason'))
    
    training_datetime = models.DateTimeField(default=timezone.localtime, verbose_name=_('Training date and time'))

Форма следующая:
class TrainingForm(forms.ModelForm):
    def clean(self):
        if self.cleaned_data['client'].trainings_list.filter(training_datetime__date=self.cleaned_data['training_datetime'].date()).exists():
            raise forms.ValidationError({'client': self.SECOND_TRAINING_FOR_SINGLE_CLIENT_ERROR})

    class Meta:
        model = models.Training
        fields = '__all__'
        widgets = {
            'training_datetime': forms.DateTimeInput(attrs={'type': 'datetime-local'}),
        }

Проблемы:
1) не вставляется значение по умолчанию
2) после отправки формы на этапе clean случается KeyError, отсутствует training_datetime.
Если убрать аттрибут {'type': 'datetime-local'} с виджета поля - все начинает работать.
Но надо именно datetime-local поле с нативными контролами, а datetime - deprecated.

помимо всего прочего, datetime-local не поддерживается firefox. Так что может быть есть еще какие-то варианты, как решить эту проблему
  • Вопрос задан
  • 180 просмотров
Пригласить эксперта
Ответы на вопрос 1
@pyHammer
Используйте какой-нибудь плагин, типа bootstrap datepicker. И не используйте встроенный DataTimeInput
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы