import datetime
from django import forms
def last_years():
first_year = datetime.datetime.now().year - 6
return list(range(first_year + 7, first_year, -1))
class MyForm(forms.Form):
# This is it... it's user friendly, and can't go wrong parsing it
date = forms.DateField(widget=forms.SelectDateWidget(years = last_years()))
8条答案
按热度按时间vsmadaxz1#
问题是我需要在
settings.py
文件中同时使用ISO和UK日期格式,如下所示:然后将forms.py调整为以下内容:
为什么
USE_L10N = True
不能这样做,我不知道!fbcarpbf2#
www.example.com中的
DATE_INPUT_FORMATS
settings.py对USE_I18N = True
无效。这是因为django会为活动区域加载特定的格式。Django为许多不同的语言环境提供了格式定义。你可以覆盖django的默认格式定义:
如django文档所述:创建自定义格式文件
bjg7j2ky3#
在Sevenearths answer中有注解
为什么
USE_L10N = True
不能这样做,我不知道!文档中说
USE_L10N = True
是默认设置,但要让英国日期工作,LANGUAGE_CODE
也必须从默认设置en-us
更改为en-GB
。一旦更改,日期字段自动接受格式“dd/mm/yyyy”和“yyyy-mm-dd”(可能还有其他格式,我没有测试过所有格式),而不需要在每个表单日期字段中设置
input_formats = settings.DATE_INPUT_FORMATS
。wf82jlnq4#
我使用下面的代码,工作在添加和编辑窗体的情况下.
在settings.py
在forms.py
nwo49xxi5#
这可能不是问题的答案,但自从我来了这里...我建议使用一个日期小部件,让Django以它理解的方式保存日期。在表单中定义字段,如下所示:
如果你把它放到Django模型的日期字段中,那么剩下的唯一问题就是格式化输出表示。我说的对吗
ljsrvy3e6#
这对我很有效
ymdaylpp7#
我会覆盖DateTimeField把我的逻辑。不管postgresql是如何存储的,你都可以随心所欲地格式化它。
文档:http://docs.djangoproject.com/en/dev/ref/models/instances/
ma8fv8wu8#
您需要如下所示设置USE_L10N
False
,以使DATE_INPUT_FORMATS能够更改DateTimeField()和DateField()的日期格式。*USE_L10N
在DATE_INPUT_FORMATS
之前,因此需要设置USE_L10N
False
:文档在DATE_INPUT_FORMATS中如下所示:
当
USE_L10N
为True
时,区域设置指定的格式具有更高的优先级,并将被应用。