如果choices是动态的,Django就失去了值



我有以下问题。假设我们有一个列日期的模型,定义如下:

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 admin中看到,如果我有这个模型的旧插入(旧的意思是比generate_dates函数返回的最新日期早),对于列date中的值,没有显示日期。

在数据库中存储,所以没有数据泄漏,但是django显示"----"而不是真正的约会。一旦我修改generate_dates返回包含旧日期的日期列表(我延长了周期),date在django admin中再次出现。

我怎样才能避免呢?假设我将数据输入到1月份的模型中,generate_dates只返回10个日期。我们的日期是1月20日,我还想要日期是1月1日。被显示。

我认为在这种情况下,您将希望为您的模型创建一个自定义管理表单。这是一个小工作,但文档解释得很好:https://docs.djangoproject.com/en/3.2/ref/contrib/admin/#modeladmin-options

最新更新