#python #django #django-models #django-admin
Вопрос:
У меня есть следующая проблема. Допустим, у нас есть модель с датой столбца, определенной следующим образом:
date = models.DateField(verbose_name="Fueling Date", choices=generate_dates())
Определение функций generate_dates() выглядит следующим образом:
def generate_dates(days_in_past=10):
"""
Generate list of dates from today to *days_in_past* days into past.
Generated elements of the list are in format required by django models.
Each element is 2-element tuple:
(datetime.date, datetime.date)
:param days_in_past:
Int number of days into past.
:return:
List of tuples consist of two datetime.date elements.
Len of generated list equals *days_in_past* 1 (because of today's day).
"""
dates = pd.date_range(
start=pd.Timestamp(datetime.datetime.today()).date() - pd.offsets.Day(days_in_past),
end=pd.Timestamp(datetime.datetime.today()).date(),
freq="D").tolist()[::-1]
dates = [(x.date(), x.date()) for x in dates]
return dates
Функция generate_dates возвращает список последних x дат (поэтому она динамична, каждый день она перемещается на один день вперед).
Я вижу в администраторе django, что если у меня есть старая вставка этой модели (старая означает, что она старше последней даты, возвращаемой функцией generate_dates), для значений в столбце дата дата не отображается.
В базе данных он хранится, поэтому утечки данных нет, но django отображает для этого «- — — — » вместо реальной даты. Как только я изменю generate_dates, чтобы вернуть список дат, содержащий старую (я продлеваю период), дата в django admin появится снова.
Как я могу этого избежать? Допустим, я ввел данные в модель 1 января, generate_dates возвращает только 10 дат. У нас 20 января, и я все еще хочу, чтобы отображалась дата «1 января».
Ответ №1:
Я думаю, что в этом случае вы захотите создать пользовательскую форму администратора для своей модели. Это небольшая работа, но в документах это очень хорошо объясняется: https://docs.djangoproject.com/en/3.2/ref/contrib/admin/#modeladmin-options