Django теряет ценность, если выбор динамичен

#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