---------------- РЕДАКТИРОВАТЬ --------------------
Я не смог сделать это с помощью Custom Model Field, и мне пришлось двигаться дальше, поэтому я сделал это альтернативным способом, указанным в конце этого поста.
Вот ссылка на новое сообщение, раскрывающее решение.
---------------- КОНЕЦ РЕДАКТИРОВАНИЯ --------------------
Мое приложение отображает наборы форм, где пользователи могут создавать объекты. После проверки форма набора снова отображается, и пользователь может добавлять новые объекты.
Даты должны быть только месяц и год («% m /% Y»).
Я мог бы поработать над полем ввода (хотя jquery), чтобы добавить '01 / 'перед введенной датой. Но после отправки в поле теперь отображается «% d /% m /% Y» (обычное значение).
Итак, я ищу способ перевода входной строки (например, 09/2018) в dateField для сохранения в базе данных, а затем преобразования этого dateField в строку при получении данных из базы данных.
Я знаю, я мог бы просто использовать форму charfield для месяцев и еще одну для лет.
Но я бы хотел сохранить его как объект даты, поэтому в шаблонах я мог бы выполнять форматирование даты ({{edu.start_date | date: "D, d M, Y"}})
Поля пользовательской модели Django звук, созданный для этого: Поля пользовательской модели Django .
Я мог бы сделать что-то подобное в настраиваемом поле:
def string_to_date(value):
value = '01/' + value
la_date = datetime.strptime(value, "%d/%m/%Y").date()
return la_date
def date_to_string(la_date_date):
la_date_str = la_date_date.strftime('%m/%Y')
return la_date_str
class DateYearMonth(models.DateField):
def get_prep_value(self, value):
if value is None:
return value
return string_to_date(value)
def to_python(self, value):
if value is None:
return value
return date_to_string(value)
Связанная форма (я прокомментировал виджеты):
class EducationForm(forms.ModelForm):
start_date = forms.CharField()
end_date = forms.CharField()
class Meta:
model = Education
exclude = ("curriculum",)
# # les widgets :
# widgets = {
# 'start_date': forms.TextInput(),
# 'end_date': forms.TextInput(),
# }
Ну, это пока не работает. Но я даже не знаю, направляюсь ли я в правильном направлении ...
EDIT
На самом деле, возможно, я мог бы использовать простое поле char для месяца и года и добавить модельный метод, который бы создавал из него дату (может быть @property) ... Таким образом, я бы оставил это простым в форме и возможность форматировать по шаблонам ...