Django在admin表单中显示了foreignkey的错误日期

时间:2014-08-21 03:42:53

标签: python django date django-admin foreign-keys

我的模型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。

2 个答案:

答案 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')