【问题标题】:Django DATE_FORMAT in settings.py ignoring formatting or being overwrittensettings.py 中的 Django DATE_FORMAT 忽略格式或被覆盖
【发布时间】:2015-08-17 21:20:51
【问题描述】:

我正在尝试更改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 创建的 Person 模型的一部分

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)

【问题讨论】:

    标签: python django django-forms django-settings


    【解决方案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)
    

    【讨论】:

    • 你是对的。导致三个选择选项水平翻转的float: right。使用DATE_FORMAT = 'YNj' 可以让我保持所有选择字段都向右对齐,同时仍然让它们按正确的顺序排列。谢谢
    猜你喜欢
    • 2018-08-04
    • 2016-05-07
    • 2022-09-23
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 2011-04-06
    • 1970-01-01
    相关资源
    最近更新 更多