settings.py中的Django DATE_FORMAT忽略格式化或被覆盖

时间:2015-06-03 15:05:31

标签: python django django-forms django-settings

我正在尝试更改SelectDateWidget的格式我已按照this question中的步骤操作,包括将USE_L10N设置为False我还查看了list of acceptable format strings并尝试了多种组合。

问题在于,无论我如何格式化字符串,当我想要在右侧时,“年份”下拉列表始终位于左侧。即使我指定了2,它也总是格式化为4位数。但是我可以通过简单地指定它来完全删除它。

有谁能告诉我如何在“Day:Moth Year”中格式化日期?

我正在使用Django 1.6.2

settings.py

LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Europe/Dublin'
USE_I18N = True
USE_L10N = False
USE_TZ = True

这些是我尝试过的一些格式和结果。月(长)=“一月”等。

DATE_FORMAT = 'j N, Y'    # Year(4 digit) : Month(long) : Day
DATE_FORMAT = 'j N, y'    # Year(4 digit) : Month(long) : Day
DATE_FORMAT = 'j N'       # Month(long) : Day
DATE_FORMAT = 'N j, Y'    # Year(4 digit) : Day : Month(long)
DATE_FORMAT = 'N j, y'    # Year(4 digit) : Day : Month(long)
DATE_FORMAT = 'N j'       # Day : Month(long)
DATE_FORMAT = 'N, j, Y'   # Year(4 digit) : Day : Month(long)
DATE_FORMAT = 'd, F, Y'   # Year(4 digit) : Month(long) : Day
DATE_FORMAT = 'd, F, y'   # Year(4 digit) : Month(long) : Day

我想在下面呈现birthdate,这是我使用ModelForm创建的人物模型的一部分

models.py

class Person(models.Model):

    birthdate = models.DateField(null=True, blank=True) #overwritten in forms.py 

forms.py

from django.forms import ModelForm
from django.forms.extras import SelectDateWidget

class SurveyFormA(forms.ModelForm):

    birthdate = forms.DateField(widget=extras.SelectDateWidget(), required=False)

1 个答案:

答案 0 :(得分:1)

SelectDateWidget将使用DATE_FORMAT,但仅限于年,月和日的顺序,仅此而已。您可以在窗口小部件代码中看到它不区分yYbF等等:

        elif char in 'Yy':
            output.append('year')
            #if not self.first_select: self.first_select = 'year'
        elif char in 'bEFMmNn':
            output.append('month')
            #if not self.first_select: self.first_select = 'month'
        elif char in 'dj':
            output.append('day')
            #if not self.first_select: self.first_select = 'day'

但在你的情况下,奇怪的是解析似乎有效,但反过来显示。 j N, Y应该给你与你得到的相反的东西。所以,你应该尝试的一件事就是让你的DATE_FORMAT反过来。像这样举例如:

DATE_FORMAT = 'YNj'

话虽这么说,你应该看看你的HTML,可能是样式中导致这种情况的东西。可能在某个地方float: right

对于2位数年份,您可以传递要显示的年份的参数。这可以是列表/元组。参见:

  

采用一个可选参数:

     

     

在“年份”选择中使用的可选列表/元组   框。默认值是包含当前年份和下一年度9的列表   年。

https://docs.djangoproject.com/en/1.6/ref/forms/widgets/

像这样:

birthdate = forms.DateField(widget=extras.SelectDateWidget(years=('15','16','17','18','19')), required=False)