我的模型Run有一个日期字段,模型Race有一个外键到Run表,如下所示:
class Run(models.Model):
date = models.DateField(default=datetime.date.today)
...
def __str__(self):
return self.date.strftime('%a %m %b %Y')
class Race(models.Model):
run = models.ForeignKey(Run, unique=True, on_delete=models.PROTECT)
...
我今天添加了一些运行,每个运行都有一个不同的日期。日期在运行摘要管理页面上正确显示。但是,在添加比赛时,运行下拉列表几乎显示所有日期为2014年8月8日' (但工作日是正确的。)
有人知道如何解决这个问题吗?我使用的是python 3.4.1和django 1.6.5。
答案 0 :(得分:1)
你的问题是微不足道的。在这里,解释self.date.strftime('%a %m %b %Y')
,
%a - Weekday as locale’s abbreviated name
%m - Month as a zero-padded decimal number.
%b - Month as locale’s abbreviated name
%m
和%b
都是月份代表。
在%b
方法中将%m
(或%d
)更改为__str__
。
日期格式can be viewed here。
样本:
>>> import datetime
>>> dt = datetime.datetime.today()
>>> dt = datetime.date.today()
>>> dt
datetime.date(2014, 8, 20)
>>> dt.strftime('%a %m %b %Y')
'Wed 08 Aug 2014'
>>> dt.strftime('%a %d %b %Y')
'Wed 20 Aug 2014'
>>> dt2 = dt - datetime.timedelta(days=1)
>>> dt2
datetime.date(2014, 8, 19)
>>> dt2.strftime('%a %m %b %Y')
'Tue 08 Aug 2014'
>>> dt2.strftime('%a %d %b %Y')
'Tue 19 Aug 2014'
答案 1 :(得分:1)
您显示的是月份0填充数字,而不是天数0填充数字
更改
def __str__(self):
return self.date.strftime('%a %m %b %Y')
到
def __unicode__(self):
return self.date.strftime('%a %d %b %Y')