Django:如何获取美国日期格式的表单?
出于某种原因,我的表单中不接受美式日期格式。我想知道是否有任何来自美国的Django开发人员可以帮助我。我怀疑设置中的时区也会影响日期格式,但我不确定。Django:如何获取美国日期格式的表单?
设置:
TIME_ZONE = 'Europe/London'
LANGUAGE_CODE = 'en-us'
USE_I18N = True
USE_L10N = True
USE_TZ = True
的ModelForm:
class CallsForm(ModelForm):
class Meta:
model = Conversation
widgets = {
'contact_date': forms.DateInput(attrs={'placeholder': 'Add the date...', 'id': 'datepicker', 'class': 'placeholder_fix_css'}, format='%m/%d/%Y'),
}
任何想法?感谢
更新:
我来到靠近了一步发生了什么:
MIDDLEWARE_CLASSES = (
...
'django.middleware.locale.LocaleMiddleware',
)
它尽快LocaleMiddleware装载看来,Django的从我的浏览器会话中获得的设置,因此dateformat更改为欧洲,反映了我的位置。聪明。
现在日期输入在美国的dateformat中被接受。 在模板中我得到Aug. 31, 2012
,这也是正确的。 但是在形式上,一旦我尝试修改记录,我会得到2012-08-31
??
这看起来不对。当然,我可以使用format='%m/%d/%Y'
来覆盖它,但不是那种硬编码和不好的做法?当然,这些表格必须依赖于当前文化的日期格式,即美国,但为什么不会发生?
尝试以下操作:
class CallsForm(ModelForm):
contact_date = DateField(widget=forms.DateInput(attrs={'placeholder': 'Add the date...', 'id': 'datepicker', 'class': 'placeholder_fix_css'}, format='%m/%d/%Y'))
class Meta:
model = Conversation
固定! Hi Kave,在经过一段时间的调查后,终于找到了解决办法。
- 首先,您应该使用activate(language_code)来切换到新的语言。
- 必须设置本地化两个:场和widget:
样品切换语言:使用
def display_current_language(request):
if request.LANGUAGE_CODE == 'en-gb':
lang = "You prefer to read British English {code}.".format(
code=request.LANGUAGE_CODE)
activate(request.LANGUAGE_CODE)
elif request.LANGUAGE_CODE == 'en-us':
lang = "You prefer to read American English {code}.".format(
code=request.LANGUAGE_CODE)
activate('en-us')
else:
lang = "You prefer to read Deutsch {code}.".format(
code=request.LANGUAGE_CODE)
activate(request.LANGUAGE_CODE)
return lang
样品模型(公司)和你的领域(日期):
class CompanyForm(ModelForm):
class Meta:
model = Company
def __init__(self, *args, **kwargs):
super(CompanyForm, self).__init__(*args, **kwargs)
self.fields['date'].localize = True
self.fields['date'].widget.is_localized = True
好吧,现在来解决这个问题。为了达到这个目标,一直是一个伟大的团队工作。 :)
由于下面提到的solartic,表单中字段的localize参数必须设置为true。如果它的ModelForm它会更棘手一点,因为你需要一个回调:
class CompanyForm(ModelForm):
def date_callback(self, field, **kwargs) :
return field.date(localize=True, **kwargs)
class Meta:
model = Company
但这还不够。如果不对任何日期输入格式进行硬编码,则需要覆盖formats.py
。这有点复杂,请参阅Creating custom format files我已经为此创建了一个演示here。
该演示仅适用于中途,因为切换语言仅适用于模板,但不适用于窗体。为了解决这个问题,你需要danihp的解决方案。 :) 语言需要再次激活,一旦切换。对于他的完整解决方案,请参阅here
解决此问题一直是一个伟大的团队努力。 :)
我希望这有助于有人出来......
你的数据库的默认日期格式是'YYYY-MM-DD'的定位是在表单字段_Input不validation_展出。在模板或输出中使用时(如在预填表格的字段时),您需要确保按照用户当前所选语言环境进行本地化。 – 2012-08-15 20:50:24