Я использую средство выбора даты и времени, где пользователь выбирает месяц (MonthPickerInput).
models.py
birthdayMonth = models.DateField(null=True, default=now)
forms.py
from bootstrap_datepicker_plus import MonthPickerInput
class QuestionForm(forms.ModelForm):
widgets = {
'birthdayMonth': MonthPickerInput(
options={
"showClose": False,
"showClear": False,
"showTodayButton": False,
}
),
}
Пользователь нажимает на поле формы, открывается календарь, и они выбирают месяц и год. MonthPicker автоматически устанавливает день равным «1». Это нормально для серверной части, но в форме, заполняемой пользователем, она отображается как 2020-03-01
. Вместо этого я бы хотел, чтобы он отображался так March 2020
(03-2020 тоже подойдет). Для этого я добавил поле в format
в froms.py
:
widgets = {
'birthdayMonth': MonthPickerInput(
options={
"format":"MMMM, YYYY",
}
),
}
Это отображается правильно во внешнем интерфейсе, однако проверка формы всегда не выполняется (всякий раз, когда я отправляю форму, ввод календаря выделяется красный, но без сообщения об ошибке).
Я распечатал данные POST в моем views.py до нажатия if form.is_valid()
и до добавления format
к виджету, он печатает 2020-08-01
, тогда как после добавления "format":"MMMM, YYYY"
печатает 08-2020
. Я предполагаю, что это вызывает проблему.
Как я могу изменить только внешний вид, но оставить исходный в исходном формате, чтобы моя проверка перестала волновать? Думаю, мне нужно было бы использовать JQuery, но все попытки не увенчались успехом:
// this does nothing
$('#birthdayMonth').datepicker({
format: 'MMMM/YYYY',
});
// I have tried many more things with JQuery but they do nothing or cause my code to go buggy (such as displaying two calendars on top of each other
Еще я подумал о том, чтобы получить birthdayMonth из моих данных POST и добавить поле дня перед его передачей в мой чистый метод. Хотя я уверен, что это сработает, это ужасно взломано и обязательно будет лучший способ.
- РЕДАКТИРОВАТЬ - Если я добавлю
birthdayMonth = forms.DateField(
input_formats=['MMMM, YYYY'],
widget=MonthPickerInput(format='MMMM, YYYY')
)
, как предлагает Бен На мой взгляд, December, 2020
, поэтому проверка не проходит.
Спасибо.